Create a filter base class and make all our filters derived classes of this base...
authortsteven4 <tsteven4@users.noreply.github.com>
Wed, 27 Jun 2018 21:36:08 +0000 (15:36 -0600)
committerGitHub <noreply@github.com>
Wed, 27 Jun 2018 21:36:08 +0000 (15:36 -0600)
53 files changed:
GPSBabel.pro
Makefile.in
arcdist.cc
arcdist.h [new file with mode: 0644]
bend.cc
bend.h [new file with mode: 0644]
defs.h
discard.cc
discard.h [new file with mode: 0644]
duplicate.cc
duplicate.h [new file with mode: 0644]
filter.h [new file with mode: 0644]
filter_vecs.cc
filterdefs.h
height.cc
height.h
heightgrid.h [new file with mode: 0644]
interpolate.cc
interpolate.h [new file with mode: 0644]
main.cc
nukedata.cc
nukedata.h [new file with mode: 0644]
polygon.cc
polygon.h [new file with mode: 0644]
position.cc
position.h [new file with mode: 0644]
queue.cc
queue.h
radius.cc
radius.h [new file with mode: 0644]
reference/swapdata.gpx [new file with mode: 0644]
reference/swapdata~gpx.gpx [new file with mode: 0644]
reverse_route.cc
reverse_route.h [new file with mode: 0644]
route.cc
smplrout.cc
smplrout.h [new file with mode: 0644]
sort.cc
sort.h [new file with mode: 0644]
src/core/datetime.h
stackfilter.cc
stackfilter.h [new file with mode: 0644]
swapdata.cc
swapdata.h [new file with mode: 0644]
testo.d/swap.test [new file with mode: 0644]
tools/createGeoidGrid
trackfilter.cc
trackfilter.h [new file with mode: 0644]
transform.cc
transform.h [new file with mode: 0644]
validate.cc
validate.h [new file with mode: 0644]
waypt.cc

index 620d0167a2d469ca782417f6379044e95a1df524..f6c74520b116198a41e00cdd2560d9743d177db3 100644 (file)
@@ -57,6 +57,8 @@ FILTERS=position.cc radius.cc duplicate.cc arcdist.cc polygon.cc smplrout.cc \
         reverse_route.cc sort.cc stackfilter.cc trackfilter.cc discard.cc \
         nukedata.cc interpolate.cc transform.cc height.cc swapdata.cc bend.cc \
         validate.cc
+FILTER_HEADERS = $$FILTERS
+FILTER_HEADERS ~= s/\.cc/.h/g
 
 SHAPE=shapelib/shpopen.c shapelib/dbfopen.c shapelib/safileio.c
 
@@ -102,7 +104,7 @@ HEADERS =  \
        gbser_private.h \
        gbversion.h \
        grtcirc.h \
-       height.h \
+       heightgrid.h \
        holux.h \
        inifile.h \
        jeeps/garminusb.h \
@@ -151,6 +153,8 @@ HEADERS =  \
        src/core/xmlstreamwriter.h \
        src/core/xmltag.h
 
+HEADERS += $$FILTER_HEADERS
+
 INCLUDEPATH += zlib
 
 load(configure)
index ec6d095a30e6a410b603487e03824e59cfef0765..e7e8d59deeee56be99b9ab076f33ce4543571555 100644 (file)
@@ -441,609 +441,693 @@ toolinfo:
        -$(QMAKE) -v
 
 # Machine generated from here down.
-alan.o: alan.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h
-an1.o: an1.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h an1sym.h
+alan.o: alan.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h
+an1.o: an1.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h an1sym.h
 arcdist.o: arcdist.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
-  grtcirc.h
-bcr.o: bcr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h csv_util.h \
-  garmin_tables.h cet_util.h
-bend.o: bend.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h filterdefs.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ arcdist.h filter.h filterdefs.h grtcirc.h
+bcr.o: bcr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h garmin_tables.h
+bend.o: bend.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h bend.h filter.h \
+ filterdefs.h grtcirc.h
 brauniger_iq.o: brauniger_iq.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  gbser.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h gbser.h
 bushnell.o: bushnell.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 bushnell_trl.o: bushnell_trl.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-cet.o: cet.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
+cet.o: cet.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
 cet_util.o: cet_util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  cet/ansi_x3_4_1968.h cet/cp1252.h cet/iso_8859_8.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h src/core/logging.h cet/ansi_x3_4_1968.h cet/cp1252.h \
+ cet/iso_8859_8.h
 compegps.o: compegps.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
-cst.o: cst.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h strptime.h
-csv_util.o: csv_util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  csv_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  grtcirc.h src/core/logging.h strptime.h xcsv_tokens.gperf
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
+cst.o: cst.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
+csv_util.o: csv_util.cc csv_util.h queue.h defs.h config.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h grtcirc.h \
+ jeeps/gpsmath.h src/core/logging.h strptime.h xcsv_tokens.gperf
 delgpl.o: delgpl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 destinator.o: destinator.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 cet_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
 jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
 jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
 jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  strptime.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h strptime.h
 dg-100.o: dg-100.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
 discard.o: discard.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ discard.h filter.h filterdefs.h
 dmtlog.o: dmtlog.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
-  jeeps/gpsport.h xmlgeneric.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
jeeps/gpsmath.h jeeps/gpsport.h xmlgeneric.h
 duplicate.o: duplicate.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  filterdefs.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h duplicate.h filter.h filterdefs.h
 easygps.o: easygps.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 energympro.o: energympro.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 enigma.o: enigma.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
-exif.o: exif.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
 jeeps/gpsmath.h jeeps/gpsport.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+exif.o: exif.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
+ jeeps/gpsmath.h jeeps/gpsport.h
 explorist_ini.o: explorist_ini.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  explorist_ini.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h explorist_ini.h
 f90g_track.o: f90g_track.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 fatal.o: fatal.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 filter_vecs.o: filter_vecs.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  filterdefs.h gbversion.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h arcdist.h filter.h filterdefs.h grtcirc.h bend.h \
+ discard.h duplicate.h height.h interpolate.h nukedata.h polygon.h \
+ position.h radius.h reverse_route.h smplrout.h sort.h stackfilter.h \
+ swapdata.h trackfilter.h strptime.h xmlgeneric.h transform.h validate.h \
+ gbversion.h
 formspec.o: formspec.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 g7towin.o: g7towin.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
-  cet_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  garmin_tables.h strptime.h
-garmin.o: garmin.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  grtcirc.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/gpsserial.h garmin_tables.h garmin_fs.h garmin_device_xml.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
+ jeeps/gpsmath.h strptime.h
+garmin.o: garmin.cc cet_util.h config.h cet.h defs.h queue.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h inifile.h session.h src/core/datetime.h \
+ garmin_device_xml.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
+ grtcirc.h jeeps/gpsserial.h
 garmin_device_xml.o: garmin_device_xml.cc defs.h config.h queue.h \
 zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
 src/core/datetime.h xmlgeneric.h garmin_device_xml.h
zlib/zlib.h zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h garmin_device_xml.h xmlgeneric.h
 garmin_fit.o: garmin_fit.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 garmin_fs.o: garmin_fs.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 cet_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
 jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
 jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
 jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  garmin_tables.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h
 garmin_gpi.o: garmin_gpi.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  cet_util.h jeeps/gpsmath.h jeeps/gpsport.h garmin_fs.h jeeps/gps.h \
-  jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
-  jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  garmin_gpi.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_gpi.h \
+ jeeps/gpsmath.h
 garmin_tables.o: garmin_tables.cc garmin_tables.h defs.h config.h queue.h \
 zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
 src/core/datetime.h src/core/logging.h jeeps/gpsmath.h jeeps/gpsport.h
zlib/zlib.h zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h jeeps/gpsmath.h jeeps/gpsport.h src/core/logging.h
 garmin_txt.o: garmin_txt.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  cet_util.h csv_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h \
-  jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
-  jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
-  jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
-  jeeps/gpsproj.h garmin_tables.h grtcirc.h strptime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h csv_util.h garmin_fs.h jeeps/gps.h \
+ jeeps/../defs.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h \
+ jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
+ jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
+ jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
+ garmin_tables.h grtcirc.h jeeps/gpsmath.h strptime.h
 garmin_xt.o: garmin_xt.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 gbfile.o: gbfile.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 src/core/logging.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ src/core/logging.h
 gbser.o: gbser.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
 gbser_private.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
+ gbser_private.h
 gbser_posix.o: gbser_posix.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  gbser.h gbser_private.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h gbser.h gbser_private.h
 gbsleep.o: gbsleep.cc config.h
-gdb.o: gdb.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h \
-  garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  garmin_tables.h grtcirc.h
-geo.o: geo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h src/core/file.h
+gdb.o: gdb.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h grtcirc.h \
+ jeeps/gpsmath.h
+geo.o: geo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h src/core/file.h \
+ defs.h
+geojson.o: geojson.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ src/core/file.h defs.h
 ggv_bin.o: ggv_bin.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 ggv_log.o: ggv_log.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h \
-  jeeps/gpsmath.h jeeps/gpsport.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
grtcirc.h jeeps/gpsmath.h jeeps/gpsport.h
 ggv_ovl.o: ggv_ovl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  grtcirc.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
cet_util.h grtcirc.h
 globals.o: globals.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbversion.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ gbversion.h
 globalsat_sport.o: globalsat_sport.cc defs.h config.h queue.h zlib/zlib.h \
  zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
  src/core/datetime.h gbser.h
 glogbook.o: glogbook.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h \
 src/core/file.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
src/core/file.h defs.h xmlgeneric.h
 gnav_trl.o: gnav_trl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 googledir.o: googledir.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  xmlgeneric.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h xmlgeneric.h
 gopal.o: gopal.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  csv_util.h strptime.h jeeps/gpsmath.h jeeps/gpsport.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h grtcirc.h jeeps/gpsmath.h jeeps/gpsport.h \
+ strptime.h
 gpssim.o: gpssim.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 gpsutil.o: gpsutil.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  magellan.h
-gpx.o: gpx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
 cet.h inifile.h session.h src/core/datetime.h cet_util.h garmin_fs.h \
 jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
 jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
 jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
 jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
 src/core/logging.h src/core/file.h src/core/xmlstreamwriter.h \
-  src/core/xmltag.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
cet_util.h magellan.h
+gpx.o: gpx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h src/core/file.h defs.h \
src/core/logging.h src/core/xmlstreamwriter.h src/core/xmltag.h
 grtcirc.o: grtcirc.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
-gtm.o: gtm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
-  jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
+gtm.o: gtm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
 gtrnctr.o: gtrnctr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
 height.o: height.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
 height.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
filterdefs.h filter.h height.h heightgrid.h
 hiketech.o: hiketech.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h \
 src/core/xmlstreamwriter.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
src/core/xmlstreamwriter.h xmlgeneric.h
 holux.o: holux.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h holux.h
-html.o: html.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
 jeeps/gpsport.h src/core/xmltag.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h holux.h
+html.o: html.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h src/core/xmltag.h
 humminbird.o: humminbird.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-igc.o: igc.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
+igc.o: igc.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
 ignrando.o: ignrando.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
-igo8.o: igo8.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h
-ik3d.o: ik3d.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
+igo8.o: igo8.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
+ik3d.o: ik3d.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
 inifile.o: inifile.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 internal_styles.o: internal_styles.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 interpolate.o: interpolate.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 filterdefs.h grtcirc.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h filterdefs.h filter.h grtcirc.h interpolate.h
 itracku.o: itracku.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
-jeeps/gpsapp.o: jeeps/gpsapp.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/garminusb.h \
-  jeeps/gpsusbint.h jeeps/gpsserial.h
-jeeps/gpscom.o: jeeps/gpscom.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
+jeeps/gpsapp.o: jeeps/gpsapp.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsserial.h jeeps/gpsusbint.h
+jeeps/gpscom.o: jeeps/gpscom.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
 jeeps/gpsdevice.o: jeeps/gpsdevice.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/gpsserial.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
 jeeps/gpsdevice_ser.o: jeeps/gpsdevice_ser.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/gpsserial.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
 jeeps/gpsdevice_usb.o: jeeps/gpsdevice_usb.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/garminusb.h jeeps/gpsusbint.h jeeps/gpsusbcommon.h
-jeeps/gpslibusb.o: jeeps/gpslibusb.cc config.h mac/libusb/usb.h \
-  jeeps/gps.h jeeps/../defs.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsport.h \
-  jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
-  jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
-  jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
-  jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h \
-  jeeps/../garmin_device_xml.h
-jeeps/gpsmath.o: jeeps/gpsmath.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsdatum.h
-jeeps/gpsmem.o: jeeps/gpsmem.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
-jeeps/gpsprot.o: jeeps/gpsprot.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
-jeeps/gpsread.o: jeeps/gpsread.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsserial.h
-jeeps/gpsrqst.o: jeeps/gpsrqst.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
-jeeps/gpssend.o: jeeps/gpssend.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsserial.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h jeeps/gpsusbint.h
+jeeps/gpslibusb.o: jeeps/gpslibusb.cc config.h jeeps/gps.h \
+ jeeps/../defs.h jeeps/../config.h jeeps/../queue.h zlib/zlib.h \
+ zlib/zconf.h jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h \
+ jeeps/../inifile.h jeeps/../session.h jeeps/../src/core/datetime.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h \
+ jeeps/../garmin_device_xml.h
+jeeps/gpsmath.o: jeeps/gpsmath.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsdatum.h
+jeeps/gpsmem.o: jeeps/gpsmem.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
+jeeps/gpsprot.o: jeeps/gpsprot.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
+jeeps/gpsread.o: jeeps/gpsread.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
+jeeps/gpsrqst.o: jeeps/gpsrqst.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
+jeeps/gpssend.o: jeeps/gpssend.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/gpsserial.h
 jeeps/gpsserial.o: jeeps/gpsserial.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/gpsserial.h jeeps/../gbser.h gbser_posix.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/../gbser.h jeeps/gpsserial.h gbser_posix.h
 jeeps/gpsusbcommon.o: jeeps/gpsusbcommon.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/garminusb.h jeeps/gpsusbcommon.h
-jeeps/gpsusbread.o: jeeps/gpsusbread.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/garminusb.h jeeps/gpsusbint.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbcommon.h
+jeeps/gpsusbread.o: jeeps/gpsusbread.cc jeeps/garminusb.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/../defs.h jeeps/../config.h \
+ jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h jeeps/../gbfile.h \
+ jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h jeeps/../session.h \
+ jeeps/../src/core/datetime.h jeeps/gpsport.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsusbint.h
 jeeps/gpsusbsend.o: jeeps/gpsusbsend.cc jeeps/gps.h jeeps/../defs.h \
-  config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h \
-  session.h src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  jeeps/garminusb.h jeeps/gpsusbint.h
-jeeps/jgpsutil.o: jeeps/jgpsutil.cc jeeps/gps.h jeeps/../defs.h config.h \
-  queue.h zlib/zlib.h zlib/zconf.h gbfile.h cet.h inifile.h session.h \
-  src/core/datetime.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h jeeps/garminusb.h jeeps/gpsusbint.h
+jeeps/jgpsutil.o: jeeps/jgpsutil.cc jeeps/gps.h jeeps/../defs.h \
+ jeeps/../config.h jeeps/../queue.h zlib/zlib.h zlib/zconf.h config.h \
+ jeeps/../gbfile.h jeeps/../defs.h jeeps/../cet.h jeeps/../inifile.h \
+ jeeps/../session.h jeeps/../src/core/datetime.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h \
+ jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h \
+ jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h \
+ jeeps/gpsproj.h
 jogmap.o: jogmap.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
-  jeeps/gpsmath.h jeeps/gpsport.h xmlgeneric.h
-jtr.o: jtr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h csv_util.h
-kml.o: kml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h grtcirc.h \
-  src/core/file.h src/core/xmlstreamwriter.h src/core/xmltag.h
-lmx.o: lmx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ garmin_tables.h jeeps/gpsmath.h jeeps/gpsport.h xmlgeneric.h
+jtr.o: jtr.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h
+kml.o: kml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h \
+ src/core/file.h defs.h src/core/xmlstreamwriter.h src/core/xmltag.h \
+ xmlgeneric.h
+lmx.o: lmx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
 lowranceusr.o: lowranceusr.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 lowranceusr4.o: lowranceusr4.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-mac/libusb/darwin.o: mac/libusb/darwin.c config.h mac/libusb/usbi.h \
-  mac/libusb/usb.h mac/libusb/error.h
-mac/libusb/descriptors.o: mac/libusb/descriptors.c mac/libusb/usbi.h \
-  mac/libusb/usb.h mac/libusb/error.h
-mac/libusb/error.o: mac/libusb/error.c mac/libusb/usb.h \
-  mac/libusb/error.h
-mac/libusb/usb.o: mac/libusb/usb.c mac/libusb/usbi.h mac/libusb/usb.h \
-  mac/libusb/error.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 maggeo.o: maggeo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
 xmlgeneric.h magellan.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
csv_util.h magellan.h xmlgeneric.h
 magproto.o: magproto.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h magellan.h \
-  gbser.h explorist_ini.h
-main.o: main.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h filterdefs.h cet_util.h \
-  csv_util.h src/core/usasciicodec.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ explorist_ini.h gbser.h magellan.h
+main.o: main.cc cet.h cet_util.h config.h defs.h queue.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h inifile.h session.h src/core/datetime.h \
+ csv_util.h filterdefs.h filter.h src/core/file.h defs.h \
+ src/core/usasciicodec.h
 mapasia.o: mapasia.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 mapbar_track.o: mapbar_track.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 mapfactor.o: mapfactor.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 src/core/file.h src/core/xmlstreamwriter.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h src/core/file.h defs.h src/core/xmlstreamwriter.h
 mapsend.o: mapsend.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h mapsend.h \
 magellan.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
magellan.h mapsend.h
 mapsource.o: mapsource.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  garmin_tables.h jeeps/gpsmath.h jeeps/gpsport.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h garmin_tables.h jeeps/gpsmath.h jeeps/gpsport.h
 mkshort.o: mkshort.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h
-mmo.o: mmo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h
+mmo.o: mmo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h
 mtk_locus.o: mtk_locus.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  gbser.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h gbser.h
 mtk_logger.o: mtk_logger.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  gbser.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h gbser.h
 mynav.o: mynav.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 navicache.o: navicache.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 cet_util.h src/core/file.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h cet_util.h src/core/file.h defs.h
 naviguide.o: naviguide.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
 navilink.o: navilink.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
 jeeps/gpsmath.h jeeps/gpsport.h navilink.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
+ jeeps/gpsmath.h jeeps/gpsport.h navilink.h
 navitel.o: navitel.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
-  jeeps/gpsport.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
jeeps/gpsmath.h jeeps/gpsport.h
 netstumbler.o: netstumbler.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  cet_util.h csv_util.h
-nmea.o: nmea.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h gbser.h \
-  strptime.h jeeps/gpsmath.h jeeps/gpsport.h
-nmn4.o: nmn4.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h cet_util.h csv_util.h
+nmea.o: nmea.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ gbser.h jeeps/gpsmath.h jeeps/gpsport.h src/core/logging.h strptime.h
+nmn4.o: nmn4.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h
 nukedata.o: nukedata.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
-osm.o: osm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
-ozi.o: ozi.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h \
-  jeeps/gpsmath.h jeeps/gpsport.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h nukedata.h
+osm.o: osm.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ozi.o: ozi.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
+ csv_util.h jeeps/gpsmath.h jeeps/gpsport.h
 parse.o: parse.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
 jeeps/gpsport.h strptime.h
-pcx.o: pcx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
 cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
 cet_util.h csv_util.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
jeeps/gpsmath.h jeeps/gpsport.h
+pcx.o: pcx.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
csv_util.h garmin_tables.h
 pocketfms_bc.o: pocketfms_bc.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 pocketfms_fp.o: pocketfms_fp.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  xmlgeneric.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h xmlgeneric.h
 pocketfms_wp.o: pocketfms_wp.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  csv_util.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h csv_util.h
 polygon.o: polygon.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h polygon.h
 position.o: position.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
 grtcirc.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
filterdefs.h filter.h grtcirc.h position.h
 psitrex.o: psitrex.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ garmin_tables.h
 queue.o: queue.cc queue.h
 radius.o: radius.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
 grtcirc.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
filterdefs.h filter.h grtcirc.h radius.h
 random.o: random.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_fs.h \
-  jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gpssend.h \
-  jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
-  jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
-  jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
+ jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
+ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
+ jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
+ jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsmath.h
 raymarine.o: raymarine.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  cet_util.h csv_util.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h cet_util.h csv_util.h
 reverse_route.o: reverse_route.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 filterdefs.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h filterdefs.h filter.h reverse_route.h
 rgbcolors.o: rgbcolors.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
 route.o: route.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
 saroute.o: saroute.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
-sbn.o: sbn.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h navilink.h
-sbp.o: sbp.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h navilink.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
+sbn.o: sbn.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h navilink.h
+sbp.o: sbp.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h navilink.h
 session.o: session.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 shape.o: shape.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 shapelib/shapefil.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ shapelib/shapefil.h
 shapelib/dbfopen.o: shapelib/dbfopen.c shapelib/shapefil.h
 shapelib/safileio.o: shapelib/safileio.c shapelib/shapefil.h
 shapelib/shpopen.o: shapelib/shpopen.c shapelib/shapefil.h
 skyforce.o: skyforce.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 skytraq.o: skytraq.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h
 smplrout.o: smplrout.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
-  grtcirc.h
-sort.o: sort.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h grtcirc.h smplrout.h
+sort.o: sort.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h \
+ filter.h sort.h
 src/core/usasciicodec.o: src/core/usasciicodec.cc src/core/usasciicodec.h
 src/core/xmlstreamwriter.o: src/core/xmlstreamwriter.cc \
-  src/core/xmlstreamwriter.h
+ src/core/xmlstreamwriter.h
+src/core/ziparchive.o: src/core/ziparchive.cc src/core/ziparchive.h \
+ defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h gbfile.h \
+ defs.h cet.h inifile.h session.h src/core/datetime.h \
+ zlib/contrib/minizip/zip.h zlib/contrib/minizip/ioapi.h \
+ src/core/logging.h
 stackfilter.o: stackfilter.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 filterdefs.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h filterdefs.h filter.h stackfilter.h
 stmsdf.o: stmsdf.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
 csv_util.h strptime.h jeeps/gpsmath.h jeeps/gpsport.h grtcirc.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
cet_util.h csv_util.h jeeps/gpsmath.h jeeps/gpsport.h grtcirc.h
 stmwpp.o: stmwpp.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
-  cet_util.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
csv_util.h cet_util.h
 strptime.o: strptime.c config.h strptime.h
 subrip.o: subrip.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 swapdata.o: swapdata.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h swapdata.h
 tef_xml.o: tef_xml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
 teletype.o: teletype.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
-text.o: text.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
 jeeps/gpsport.h src/core/xmltag.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+text.o: text.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h src/core/xmltag.h
 tiger.o: tiger.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  csv_util.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
cet_util.h csv_util.h
 tmpro.o: tmpro.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  csv_util.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
cet_util.h csv_util.h
 tomtom.o: tomtom.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
-tpg.o: tpg.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
 jeeps/gpsport.h
-tpo.o: tpo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
 jeeps/gpsport.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+tpg.o: tpg.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
+tpo.o: tpo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
 trackfilter.o: trackfilter.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
-  filterdefs.h grtcirc.h strptime.h xmlgeneric.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h filterdefs.h filter.h grtcirc.h strptime.h \
+ trackfilter.h xmlgeneric.h
 transform.o: transform.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 filterdefs.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h filterdefs.h filter.h transform.h
 unicsv.o: unicsv.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  csv_util.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
-  jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
-  jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
-  jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  garmin_tables.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h csv_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h \
+ jeeps/gpsport.h jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h \
+ jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h \
+ jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h \
+ jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h garmin_tables.h \
+ jeeps/gpsmath.h src/core/logging.h
 units.o: units.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
-util.o: util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
 cet.h inifile.h session.h src/core/datetime.h src/core/xmltag.h \
 jeeps/gpsmath.h jeeps/gpsport.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+util.o: util.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
jeeps/gpsport.h src/core/xmltag.h
 util_crc.o: util_crc.cc
-v900.o: v900.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h
+v900.o: v900.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h
 validate.o: validate.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h filterdefs.h
-vcf.o: vcf.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
-  jeeps/gpsport.h
-vecs.o: vecs.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h csv_util.h gbversion.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ filterdefs.h filter.h validate.h
+vcf.o: vcf.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h jeeps/gpsmath.h \
+ jeeps/gpsport.h
+vecs.o: vecs.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h csv_util.h \
+ gbversion.h
 vidaone.o: vidaone.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
 vitosmt.o: vitosmt.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h grtcirc.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ grtcirc.h
 vitovtt.o: vitovtt.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h
-vpl.o: vpl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
+vpl.o: vpl.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
gbfile.h cet.h inifile.h session.h src/core/datetime.h
 waypt.o: waypt.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
 gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
 grtcirc.h garmin_fs.h jeeps/gps.h jeeps/gpsport.h jeeps/gpsdevice.h \
 jeeps/gpssend.h jeeps/gpsread.h jeeps/gpsutil.h jeeps/gpsapp.h \
 jeeps/gpsprot.h jeeps/gpscom.h jeeps/gpsfmt.h jeeps/gpsmath.h \
 jeeps/gpsmem.h jeeps/gpsrqst.h jeeps/gpsinput.h jeeps/gpsproj.h \
-  src/core/logging.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
cet_util.h garmin_fs.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
jeeps/gpsdevice.h jeeps/gps.h jeeps/gpssend.h jeeps/gpsread.h \
jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \
jeeps/gpsfmt.h jeeps/gpsmath.h jeeps/gpsmem.h jeeps/gpsrqst.h \
jeeps/gpsinput.h jeeps/gpsproj.h grtcirc.h src/core/logging.h
 wbt-200.o: wbt-200.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
 grtcirc.h
config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h gbser.h \
+ grtcirc.h
 wfff_xml.o: wfff_xml.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
 wintec_tes.o: wintec_tes.cc defs.h config.h queue.h zlib/zlib.h \
-  zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h
-xcsv.o: xcsv.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h cet_util.h csv_util.h \
-  jeeps/gpsmath.h jeeps/gpsport.h
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h
+xcsv.o: xcsv.cc csv_util.h queue.h defs.h config.h zlib/zlib.h \
+ zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
+ src/core/datetime.h jeeps/gpsmath.h jeeps/gpsport.h src/core/file.h \
+ defs.h src/core/logging.h
 xhtmlent.o: xhtmlent.cc
 xmlgeneric.o: xmlgeneric.cc defs.h config.h queue.h zlib/zlib.h \
 zlib/zconf.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
 xmlgeneric.h cet_util.h src/core/file.h
zlib/zconf.h config.h gbfile.h cet.h inifile.h session.h \
src/core/datetime.h cet_util.h src/core/file.h defs.h xmlgeneric.h
 xmltag.o: xmltag.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h cet_util.h \
-  src/core/xmltag.h
-xol.o: xol.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \
-  cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h \
-  jeeps/gpsmath.h jeeps/gpsport.h garmin_tables.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ cet_util.h src/core/xmltag.h
+xol.o: xol.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h config.h \
+ gbfile.h cet.h inifile.h session.h src/core/datetime.h garmin_tables.h \
+ jeeps/gpsmath.h jeeps/gpsport.h src/core/file.h defs.h \
+ src/core/xmlstreamwriter.h xmlgeneric.h
 yahoo.o: yahoo.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \
-  gbfile.h cet.h inifile.h session.h src/core/datetime.h xmlgeneric.h
+ config.h gbfile.h cet.h inifile.h session.h src/core/datetime.h \
+ xmlgeneric.h
 zlib/adler32.o: zlib/adler32.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
 config.h
+ config.h
 zlib/compress.o: zlib/compress.c zlib/zlib.h zlib/zconf.h config.h
+zlib/contrib/minizip/ioapi.o: zlib/contrib/minizip/ioapi.c \
+ zlib/contrib/minizip/ioapi.h zlib/zlib.h zlib/zconf.h config.h
+zlib/contrib/minizip/zip.o: zlib/contrib/minizip/zip.c zlib/zlib.h \
+ zlib/zconf.h config.h zlib/contrib/minizip/zip.h \
+ zlib/contrib/minizip/ioapi.h zlib/contrib/minizip/crypt.h
 zlib/crc32.o: zlib/crc32.c zlib/zutil.h zlib/zlib.h zlib/zconf.h config.h \
 zlib/crc32.h
+ zlib/crc32.h
 zlib/deflate.o: zlib/deflate.c zlib/deflate.h zlib/zutil.h zlib/zlib.h \
 zlib/zconf.h config.h
+ zlib/zconf.h config.h
 zlib/gzclose.o: zlib/gzclose.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
 config.h
+ config.h
 zlib/gzlib.o: zlib/gzlib.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
 config.h
+ config.h
 zlib/gzread.o: zlib/gzread.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
 config.h
+ config.h
 zlib/gzwrite.o: zlib/gzwrite.c zlib/gzguts.h zlib/zlib.h zlib/zconf.h \
 config.h
+ config.h
 zlib/infback.o: zlib/infback.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
 config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
+ config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
 zlib/inffast.o: zlib/inffast.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
 config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h
+ config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h
 zlib/inflate.o: zlib/inflate.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
 config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
+ config.h zlib/inftrees.h zlib/inflate.h zlib/inffast.h zlib/inffixed.h
 zlib/inftrees.o: zlib/inftrees.c zlib/zutil.h zlib/zlib.h zlib/zconf.h \
 config.h zlib/inftrees.h
+ config.h zlib/inftrees.h
 zlib/trees.o: zlib/trees.c zlib/deflate.h zlib/zutil.h zlib/zlib.h \
 zlib/zconf.h config.h zlib/trees.h
+ zlib/zconf.h config.h zlib/trees.h
 zlib/uncompr.o: zlib/uncompr.c zlib/zlib.h zlib/zconf.h config.h
 zlib/zutil.o: zlib/zutil.c zlib/zutil.h zlib/zlib.h zlib/zconf.h config.h \
 zlib/gzguts.h
+ zlib/gzguts.h
 internal_styles.cc: mkstyle.sh $(srcdir)/style/*.style
        $(srcdir)/mkstyle.sh > internal_styles.cc || (rm -f internal_styles.cc ; exit 1)
index 3b52e3bc10835aa67a207b1b74a7165dde345f53..1b95c0688a3a176b8027add3098cf3808abee101 100644 (file)
@@ -21,6 +21,7 @@
 
 
 #include "defs.h"
+#include "arcdist.h"
 #include "filterdefs.h"
 #include "grtcirc.h"
 
 #if FILTERS_ENABLED
 #define MYNAME "Arc filter"
 
-static double pos_dist;
-static char* distopt = nullptr;
-static char* arcfileopt = nullptr;
-static char* rteopt = nullptr;
-static char* trkopt = nullptr;
-static char* exclopt = nullptr;
-static char* ptsopt = nullptr;
-static char* projectopt = nullptr;
-
-typedef struct {
-  double distance;
-  double prjlatitude, prjlongitude;
-  double frac;
-  Waypoint* arcpt1, * arcpt2;
-} extra_data;
-
-static
-arglist_t arcdist_args[] = {
-  {
-    "file", &arcfileopt,  "File containing vertices of arc",
-    nullptr, ARGTYPE_FILE, ARG_NOMINMAX, nullptr
-  },
-  {
-    "rte", &rteopt, "Route(s) are vertices of arc",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "trk", &trkopt, "Track(s) are vertices of arc",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "distance", &distopt, "Maximum distance from arc",
-    nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  {
-    "exclude", &exclopt, "Exclude points close to the arc", nullptr,
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "points", &ptsopt, "Use distance from vertices not lines",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "project", &projectopt, "Move waypoints to its projection on lines or vertices",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
 #define BADVAL 999999
 
-static void
-arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2)
+void ArcDistanceFilter::arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2)
 {
   queue* elem, * tmp;
   Waypoint* waypointp;
@@ -96,7 +47,7 @@ arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2)
       (ptsopt || (arcpt1 &&
                   (arcpt1->latitude != BADVAL && arcpt1->longitude != BADVAL)))) {
 #if NEWQ
-    foreach(Waypoint* waypointp, waypt_list) {
+    foreach (Waypoint* waypointp, waypt_list) {
 #else
     QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
       waypointp = (Waypoint*) elem;
@@ -146,16 +97,17 @@ arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2)
   arcpt1 = (Waypoint*) arcpt2;
 }
 
-static void
-arcdist_arc_disp_hdr_cb(const route_head*)
+void ArcDistanceFilter::arcdist_arc_disp_hdr_cb(const route_head*)
 {
   /* Set arcpt1 to NULL */
   arcdist_arc_disp_wpt_cb(nullptr);
 }
 
-static void
-arcdist_process()
+void ArcDistanceFilter::process()
 {
+  WayptFunctor<ArcDistanceFilter> arcdist_arc_disp_wpt_cb_f(this, &ArcDistanceFilter::arcdist_arc_disp_wpt_cb);
+  RteHdFunctor<ArcDistanceFilter> arcdist_arc_disp_hdr_cb_f(this, &ArcDistanceFilter::arcdist_arc_disp_hdr_cb);
+
   queue* elem, * tmp;
   unsigned removed;
 
@@ -203,14 +155,14 @@ arcdist_process()
 
     gbfclose(file_in);
   } else if (rteopt) {
-    route_disp_all(arcdist_arc_disp_hdr_cb, nullptr, arcdist_arc_disp_wpt_cb);
+    route_disp_all(arcdist_arc_disp_hdr_cb_f, nullptr, arcdist_arc_disp_wpt_cb_f);
   } else if (trkopt) {
-    track_disp_all(arcdist_arc_disp_hdr_cb, nullptr, arcdist_arc_disp_wpt_cb);
+    track_disp_all(arcdist_arc_disp_hdr_cb_f, nullptr, arcdist_arc_disp_wpt_cb_f);
   }
 
   removed = 0;
 #if NEWQ
-  foreach(Waypoint* wp, waypt_list) {
+  foreach (Waypoint* wp, waypt_list) {
 #else
   QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
     Waypoint* wp = (Waypoint*) elem;
@@ -267,8 +219,7 @@ arcdist_process()
   }
 }
 
-static void
-arcdist_init(const char*)
+void ArcDistanceFilter::init()
 {
   char* fm;
 
@@ -290,17 +241,4 @@ arcdist_init(const char*)
   }
 }
 
-static void
-arcdist_deinit()
-{
-  /* do nothing */
-}
-
-filter_vecs_t arcdist_vecs = {
-  arcdist_init,
-  arcdist_process,
-  arcdist_deinit,
-  nullptr,
-  arcdist_args
-};
 #endif // FILTERS_ENABLED
diff --git a/arcdist.h b/arcdist.h
new file mode 100644 (file)
index 0000000..66f4c4d
--- /dev/null
+++ b/arcdist.h
@@ -0,0 +1,94 @@
+/*
+    Distance from point to arc filter
+
+    Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef ARCDIST_H_INCLUDED_
+#define ARCDIST_H_INCLUDED_
+
+#include "defs.h"    // for ARG_NOMINMAX, ARGTYPE_BOOL, Waypoint (ptr only)
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class ArcDistanceFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+  double pos_dist;
+  char* distopt = nullptr;
+  char* arcfileopt = nullptr;
+  char* rteopt = nullptr;
+  char* trkopt = nullptr;
+  char* exclopt = nullptr;
+  char* ptsopt = nullptr;
+  char* projectopt = nullptr;
+
+  typedef struct {
+    double distance;
+    double prjlatitude, prjlongitude;
+    double frac;
+    Waypoint* arcpt1, * arcpt2;
+  } extra_data;
+
+  arglist_t args[8] = {
+    {
+      "file", &arcfileopt,  "File containing vertices of arc",
+      nullptr, ARGTYPE_FILE, ARG_NOMINMAX, nullptr
+    },
+    {
+      "rte", &rteopt, "Route(s) are vertices of arc",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "trk", &trkopt, "Track(s) are vertices of arc",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "distance", &distopt, "Maximum distance from arc",
+      nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    {
+      "exclude", &exclopt, "Exclude points close to the arc", nullptr,
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "points", &ptsopt, "Use distance from vertices not lines",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "project", &projectopt, "Move waypoints to its projection on lines or vertices",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  void arcdist_arc_disp_wpt_cb(const Waypoint* arcpt2);
+  void arcdist_arc_disp_hdr_cb(const route_head*);
+
+};
+#endif // FILTERS_ENABLED
+#endif // ARCDIST_H_INCLUDED_
diff --git a/bend.cc b/bend.cc
index 9800b123f1391c145b471404f9e7eedc0bf633d6..b40c752dc08b0c410d24612dbf64ceeba9c8b33e 100644 (file)
--- a/bend.cc
+++ b/bend.cc
@@ -21,6 +21,7 @@
  */
 
 #include "defs.h"
+#include "bend.h"
 #include "filterdefs.h"
 #include "grtcirc.h"
 
 
 #if FILTERS_ENABLED
 
-static char* distopt = nullptr;
-static char* minangleopt = nullptr;
-
-static double maxDist;
-static double minAngle;
-
-static queue* routes_orig = nullptr;
-static int routes_orig_num = 0;
-
-static
-arglist_t bend_args[] = {
-  {
-    "distance", &distopt, "Distance to the bend in meters where the new points will be added",
-    "25", ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "minangle", &minangleopt, "Minimum bend angle in degrees", "5",
-    ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static void
-bend_init(const char*)
+void BendFilter::init()
 {
   maxDist = 0.0;
   if (distopt) {
@@ -70,9 +48,8 @@ bend_init(const char*)
   route_flush_all_routes();
 }
 
-static Waypoint*
-create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
-                double long_orig, double lat_orig_adj, double long_orig_adj)
+Waypoint* BendFilter::create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
+                                      double long_orig, double lat_orig_adj, double long_orig_adj)
 {
   double distance = gcdist(lat_orig, long_orig,
                            lat_orig_adj, long_orig_adj);
@@ -97,10 +74,9 @@ create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
   return wpt_dest;
 }
 
-static int
-is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
-               double long_orig_prev, double lat_orig_next,
-               double long_orig_next)
+int BendFilter::is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
+                               double long_orig_prev, double lat_orig_next,
+                               double long_orig_next)
 {
   double heading_prev = heading_true_degrees(lat_orig, long_orig,
                         lat_orig_prev, long_orig_prev);
@@ -114,8 +90,7 @@ is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
           || (std::abs(heading_diff - 360.0) < minAngle));
 }
 
-static void
-process_route(const route_head* route_orig, route_head* route_dest)
+void BendFilter::process_route(const route_head* route_orig, route_head* route_dest)
 {
   Waypoint* wpt_orig_prev = nullptr;
   Waypoint* wpt_orig = nullptr;
@@ -171,8 +146,7 @@ process_route(const route_head* route_orig, route_head* route_dest)
   }
 }
 
-static void
-process_route_orig(const route_head* route_orig)
+void BendFilter::process_route_orig(const route_head* route_orig)
 {
   route_head* route_dest = route_head_alloc();
   route_dest->rte_name = route_orig->rte_name;
@@ -185,8 +159,7 @@ process_route_orig(const route_head* route_orig)
   process_route(route_orig, route_dest);
 }
 
-static void
-bend_process()
+void BendFilter::process()
 {
   queue* elem, *tmp;
   QUEUE_FOR_EACH(routes_orig, elem, tmp) {
@@ -195,24 +168,10 @@ bend_process()
   }
 }
 
-static void
-bend_deinit()
+void BendFilter::deinit()
 {
   route_flush(routes_orig);
   xfree(routes_orig);
 }
 
-static void
-bend_exit()
-{
-}
-
-filter_vecs_t bend_vecs = {
-  bend_init,
-  bend_process,
-  bend_deinit,
-  bend_exit,
-  bend_args
-};
-
 #endif // FILTERS_ENABLED
diff --git a/bend.h b/bend.h
new file mode 100644 (file)
index 0000000..242d0f7
--- /dev/null
+++ b/bend.h
@@ -0,0 +1,76 @@
+/*
+    Add route points before and after a bend.
+
+    Copyright (C) 2011 Fernando Arbeiza, fernando.arbeiza@gmail.com
+    Copyright (C) 2011 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef BEND_H_INCLUDED_
+#define BEND_H_INCLUDED_
+
+#include "defs.h"    // for route_head (ptr only), ARGTYPE_FLOAT, ARG_NOMINMAX
+#include "filter.h"  // for Filter
+#include "queue.h"   // for queue
+
+#if FILTERS_ENABLED
+
+class BendFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+  void deinit() override;
+
+private:
+  char* distopt = nullptr;
+  char* minangleopt = nullptr;
+
+  double maxDist;
+  double minAngle;
+
+  queue* routes_orig = nullptr;
+  int routes_orig_num = 0;
+
+  arglist_t args[3] = {
+    {
+      "distance", &distopt, "Distance to the bend in meters where the new points will be added",
+      "25", ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "minangle", &minangleopt, "Minimum bend angle in degrees", "5",
+      ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  Waypoint* create_wpt_dest(const Waypoint* wpt_orig, double lat_orig,
+                            double long_orig, double lat_orig_adj, double long_orig_adj);
+  int is_small_angle(double lat_orig, double long_orig, double lat_orig_prev,
+                     double long_orig_prev, double lat_orig_next,
+                     double long_orig_next);
+  void process_route(const route_head* route_orig, route_head* route_dest);
+  void process_route_orig(const route_head* route_orig);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // BEND_H_INCLUDED_
diff --git a/defs.h b/defs.h
index deb8011ef215c7c5043bafbd05ae2a74c4bb2e9b..1261d9d3cbe133f3fe7f65d88ab205d461c82656 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -568,8 +568,8 @@ unsigned int waypt_count(void);
 void set_waypt_count(unsigned int nc);
 void waypt_disp(const Waypoint* wpt);
 void waypt_status_disp(int total_ct, int myct);
-void waypt_disp_all(waypt_cb);
-void waypt_disp_session(const session_t* se, waypt_cb cb);
+//void waypt_disp_all(waypt_cb); /* template */
+//void waypt_disp_session(const session_t* se, waypt_cb cb); /* template */
 void waypt_init_bounds(bounds* bounds);
 int waypt_bounds_valid(bounds* bounds);
 void waypt_add_to_bounds(bounds* bounds, const Waypoint* waypointp);
@@ -595,6 +595,40 @@ double waypt_vertical_speed(const Waypoint* A, const Waypoint* B);
 double waypt_gradient(const Waypoint* A, const Waypoint* B);
 double waypt_course(const Waypoint* A, const Waypoint* B);
 
+template <typename T>
+void
+waypt_disp_session(const session_t* se, T cb)
+{
+  extern queue waypt_head;
+  int i = 0;
+#if NEWQ
+  foreach (Waypoint* waypointp, waypt_list) {
+#else
+  queue* elem, *tmp;
+  Waypoint* waypointp;
+  QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
+    waypointp = (Waypoint*) elem;
+#endif
+    if ((se == nullptr) || (waypointp->session == se)) {
+      if (global_opts.verbose_status) {
+        i++;
+        waypt_status_disp(waypt_count(), i);
+      }
+      cb(waypointp);
+    }
+  }
+  if (global_opts.verbose_status) {
+    fprintf(stdout, "\r\n");
+  }
+}
+
+template <typename T>
+void
+waypt_disp_all(T cb)
+{
+  waypt_disp_session(nullptr, cb);
+}
+
 /*
  *  Structure of recomputed track/roue data.
  */
@@ -657,9 +691,10 @@ void track_add_wpt(route_head* rte, Waypoint* wpt);
 Waypoint* route_find_waypt_by_name(route_head* rh, const char* name);
 void route_del_wpt(route_head* rte, Waypoint* wpt);
 void track_del_wpt(route_head* rte, Waypoint* wpt);
-void route_disp(const route_head* rte, waypt_cb);
-void route_disp_all(route_hdr, route_trl, waypt_cb);
-void track_disp_all(route_hdr, route_trl, waypt_cb);
+//void route_disp(const route_head* rte, waypt_cb); /* template */
+void route_disp(const route_head* rte, std::nullptr_t /* waypt_cb */); /* override to catch nullptr */
+//void route_disp_all(route_hdr, route_trl, waypt_cb); /* template */
+//void track_disp_all(route_hdr, route_trl, waypt_cb); /* template */
 void route_reverse(const route_head* rte_hd);
 void route_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc);
 void track_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc);
@@ -676,6 +711,97 @@ void track_backup(signed int* count, queue** head_bak);
 void track_restore(queue* head_bak);
 void track_recompute(const route_head* trk, computed_trkdata**);
 
+template <typename T>
+void
+route_disp(const route_head* rh, T cb)
+{
+  queue* elem, *tmp;
+// cb != nullptr, caught with an overload of route_disp
+  QUEUE_FOR_EACH(&rh->waypoint_list, elem, tmp) {
+    Waypoint* waypointp;
+    waypointp = (Waypoint*) elem;
+    cb(waypointp);
+  }
+}
+
+template <typename T1, typename T2, typename T3>
+void
+common_disp_all(queue* qh, T1 rh, T2 rt, T3 wc)
+{
+  queue* elem, *tmp;
+  QUEUE_FOR_EACH(qh, elem, tmp) {
+    const route_head* rhp;
+    rhp = (route_head*) elem;
+// rh != nullptr, caught with an overload of common_disp_all
+    rh(rhp);
+    route_disp(rhp, wc);
+// rt != nullptr, caught with an overload of common_disp_all
+    rt(rhp);
+  }
+}
+
+template <typename T2, typename T3>
+void
+common_disp_all(queue* qh, std::nullptr_t /* rh */, T2 rt, T3 wc)
+{
+  queue* elem, *tmp;
+  QUEUE_FOR_EACH(qh, elem, tmp) {
+    const route_head* rhp;
+    rhp = (route_head*) elem;
+// rh == nullptr
+    route_disp(rhp, wc);
+// rt != nullptr, caught with an overload of common_disp_all
+    rt(rhp);
+  }
+}
+
+template <typename T1, typename T3>
+void
+common_disp_all(queue* qh, T1 rh, std::nullptr_t /* rt */, T3 wc)
+{
+  queue* elem, *tmp;
+  QUEUE_FOR_EACH(qh, elem, tmp) {
+    const route_head* rhp;
+    rhp = (route_head*) elem;
+// rh != nullptr, caught with an overload of common_disp_all
+    rh(rhp);
+    route_disp(rhp, wc);
+// rt == nullptr
+  }
+}
+
+template <typename T3>
+void
+common_disp_all(queue* qh, std::nullptr_t /* rh */, std::nullptr_t /* rt */, T3 wc)
+{
+  queue* elem, *tmp;
+  QUEUE_FOR_EACH(qh, elem, tmp) {
+    const route_head* rhp;
+    rhp = (route_head*) elem;
+// rh == nullptr
+    route_disp(rhp, wc);
+// rt == nullptr
+  }
+}
+
+template <typename T1, typename T2, typename T3>
+void
+route_disp_all(T1 rh, T2 rt, T3 wc)
+{
+  extern queue my_route_head;
+
+  common_disp_all(&my_route_head, rh, rt, wc);
+}
+
+template <typename T1, typename T2, typename T3>
+void
+track_disp_all(T1 rh, T2 rt, T3 wc)
+{
+  extern queue my_track_head;
+
+  common_disp_all(&my_track_head, rh, rt, wc);
+}
+
 typedef struct {
   volatile int request_terminate;
 } posn_status;
index 2e18947007e8816445a4c75e8d88ed06de59449b..e5b5de10a32f979414e07da5369e825b0f099a8a 100644 (file)
  */
 
 #include "defs.h"
+#include "discard.h"
 #include "filterdefs.h"
 #include <cstdlib>
-// Can't use QRegularExpression because Linux won't get Qt 5 for years. 
+// Can't use QRegularExpression because Linux won't get Qt 5 for years.
 #include <QtCore/QRegExp>
 #include <cstdio>
 #include <cstdlib>
 
 #if FILTERS_ENABLED
-static char* hdopopt = nullptr;
-static char* vdopopt = nullptr;
-static char* andopt = nullptr;
-static char* satopt = nullptr;
-static char* fixnoneopt = nullptr;
-static char* fixunknownopt = nullptr;
-static char* eleminopt = nullptr;
-static char* elemaxopt = nullptr;
-static char* nameopt = nullptr;
-static QRegExp name_regex;
-static char* descopt = nullptr;
-static QRegExp desc_regex;
-static char* cmtopt = nullptr;
-static QRegExp cmt_regex;
-static char* iconopt = nullptr;
-static QRegExp icon_regex;
-
-static double hdopf;
-static double vdopf;
-static int satpf;
-static int eleminpf;
-static int elemaxpf;
-static gpsdata_type what;
-static route_head* head;
-
-static
-arglist_t fix_args[] = {
-  {
-    "hdop", &hdopopt, "Suppress points with higher hdop",
-    "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "vdop", &vdopopt, "Suppress points with higher vdop",
-    "-1.0", ARGTYPE_END_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "hdopandvdop", &andopt, "Link hdop and vdop supression with AND",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "sat", &satopt, "Minimium sats to keep points",
-    "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "fixnone", &fixnoneopt, "Suppress points without fix",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "fixunknown", &fixunknownopt, "Suppress points with unknown fix",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "elemin", &eleminopt, "Suppress points below given elevation in meters",
-    nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "elemax", &elemaxopt, "Suppress points above given elevation in meters",
-    nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "matchname", &nameopt,
-    "Suppress points where name matches given name", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    "matchdesc", &descopt,
-    "Suppress points where description matches given name", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    "matchcmt", &cmtopt,
-    "Suppress points where comment matches given name", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    "matchicon", &iconopt,
-    "Suppress points where type matches given name", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
 
 /*
  * Decide whether to keep or toss this point.
  */
-static void
-fix_process_wpt(const Waypoint* wpt)
+void DiscardFilter::fix_process_wpt(const Waypoint* wpt)
 {
   int del = 0;
   int delh = 0;
@@ -186,31 +105,31 @@ fix_process_wpt(const Waypoint* wpt)
   }
 }
 
-static void
-fix_process_head(const route_head* trk)
+void DiscardFilter::fix_process_head(const route_head* trk)
 {
   head = (route_head*)trk;
 }
 
-static void
-fix_process()
+void DiscardFilter::process()
 {
+  WayptFunctor<DiscardFilter> fix_process_wpt_f(this, &DiscardFilter::fix_process_wpt);
+  RteHdFunctor<DiscardFilter> fix_process_head_f(this, &DiscardFilter::fix_process_head);
+
   // Filter waypoints.
   what = wptdata;
-  waypt_disp_all(fix_process_wpt);
+  waypt_disp_all(fix_process_wpt_f);
 
   // Filter tracks
   what = trkdata;
-  track_disp_all(fix_process_head, nullptr, fix_process_wpt);
+  track_disp_all(fix_process_head_f, nullptr, fix_process_wpt_f);
 
   // And routes
   what = rtedata;
-  route_disp_all(fix_process_head, nullptr, fix_process_wpt);
+  route_disp_all(fix_process_head_f, nullptr, fix_process_wpt_f);
 
 }
 
-static void
-fix_init(const char*)
+void DiscardFilter::init()
 {
   if (hdopopt) {
     hdopf = atof(hdopopt);
@@ -260,11 +179,4 @@ fix_init(const char*)
   }
 }
 
-filter_vecs_t discard_vecs = {
-  fix_init,
-  fix_process,
-  nullptr,
-  nullptr,
-  fix_args
-};
 #endif
diff --git a/discard.h b/discard.h
new file mode 100644 (file)
index 0000000..d31d46e
--- /dev/null
+++ b/discard.h
@@ -0,0 +1,129 @@
+/*
+    Discard points based on high Degree of Precision (DOP) values.
+
+    Copyright (C) 2005-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef DISCARD_H_INCLUDED_
+#define DISCARD_H_INCLUDED_
+
+// Can't use QRegularExpression because Linux won't get Qt 5 for years.
+#include <QtCore/QRegExp>  // for QRegExp
+#include "defs.h"          // for ARG_NOMINMAX, ARGTYPE_BEGIN_REQ, ARGTYPE_S...
+#include "filter.h"        // for Filter
+
+#if FILTERS_ENABLED
+class DiscardFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+  char* hdopopt = nullptr;
+  char* vdopopt = nullptr;
+  char* andopt = nullptr;
+  char* satopt = nullptr;
+  char* fixnoneopt = nullptr;
+  char* fixunknownopt = nullptr;
+  char* eleminopt = nullptr;
+  char* elemaxopt = nullptr;
+  char* nameopt = nullptr;
+  QRegExp name_regex;
+  char* descopt = nullptr;
+  QRegExp desc_regex;
+  char* cmtopt = nullptr;
+  QRegExp cmt_regex;
+  char* iconopt = nullptr;
+  QRegExp icon_regex;
+
+  double hdopf;
+  double vdopf;
+  int satpf;
+  int eleminpf;
+  int elemaxpf;
+  gpsdata_type what;
+  route_head* head;
+
+  arglist_t args[13] = {
+    {
+      "hdop", &hdopopt, "Suppress points with higher hdop",
+      "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "vdop", &vdopopt, "Suppress points with higher vdop",
+      "-1.0", ARGTYPE_END_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "hdopandvdop", &andopt, "Link hdop and vdop supression with AND",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "sat", &satopt, "Minimium sats to keep points",
+      "-1.0", ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "fixnone", &fixnoneopt, "Suppress points without fix",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "fixunknown", &fixunknownopt, "Suppress points with unknown fix",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "elemin", &eleminopt, "Suppress points below given elevation in meters",
+      nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "elemax", &elemaxopt, "Suppress points above given elevation in meters",
+      nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_INT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "matchname", &nameopt,
+      "Suppress points where name matches given name", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      "matchdesc", &descopt,
+      "Suppress points where description matches given name", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      "matchcmt", &cmtopt,
+      "Suppress points where comment matches given name", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      "matchicon", &iconopt,
+      "Suppress points where type matches given name", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  void fix_process_wpt(const Waypoint* wpt);
+  void fix_process_head(const route_head* trk);
+
+};
+
+#endif
+#endif // DISCARD_H_INCLUDED_
index afd7d76ba4d76e98a88518e0efe1b89a988de20e..3fcbd8e40e4c584011404074774fad6055ba9c07 100644 (file)
 
  */
 #include "defs.h"
+#include "duplicate.h"
 #include "filterdefs.h"
 #include <cstdio>
 #include <cstdlib> // qsort
 
 #if FILTERS_ENABLED
-static char* snopt = nullptr;
-static char* lcopt = nullptr;
-static char* purge_duplicates = nullptr;
-static char* correct_coords = nullptr;
-
-static
-arglist_t dup_args[] = {
-  {
-    "shortname", &snopt, "Suppress duplicate waypoints based on name",
-    nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "location", &lcopt, "Suppress duplicate waypoint based on coords",
-    nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "all", &purge_duplicates, "Suppress all instances of duplicates",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "correct", &correct_coords, "Use coords from duplicate points",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-
-typedef struct btree_node {
-  struct btree_node* left, *right;
-  unsigned long data;
-  Waypoint* wpt;
-} btree_node;
-
-static btree_node*
-addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode)
+
+DuplicateFilter::btree_node* DuplicateFilter::addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode)
 {
   btree_node* tmp, * last = nullptr;
 
@@ -95,8 +63,7 @@ addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode)
   return (tree);
 }
 
-static void
-free_tree(btree_node* tree)
+void DuplicateFilter::free_tree(btree_node* tree)
 {
   if (tree->left) {
     free_tree(tree->left);
@@ -107,11 +74,6 @@ free_tree(btree_node* tree)
   xfree(tree);
 }
 
-typedef struct {
-  Waypoint* wpt;
-  int index;
-} wpt_ptr;
-
 /*
 
 It looks odd that we have different comparisons for date and index.
@@ -146,9 +108,7 @@ because, sadly, quicksort can be O(n^2) on presorted elements.)
 */
 
 
-static
-int
-compare(const void* a, const void* b)
+int DuplicateFilter::compare(const void* a, const void* b)
 {
   const wpt_ptr* wa = (wpt_ptr*)a;
   const wpt_ptr* wb = (wpt_ptr*)b;
@@ -171,9 +131,7 @@ compare(const void* a, const void* b)
 
 }
 
-
-static void
-duplicate_process(void)
+void DuplicateFilter::process(void)
 {
   Waypoint* waypointp;
   btree_node* newnode, * btmp, * sup_tree = nullptr;
@@ -195,7 +153,7 @@ duplicate_process(void)
 
   i = 0;
 #if NEWQ
-  foreach(Waypoint* waypointp, waypt_list) {
+  foreach (Waypoint* waypointp, waypt_list) {
     bh->wpt = waypointp;
 #else
   QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
@@ -271,11 +229,4 @@ duplicate_process(void)
   }
 }
 
-filter_vecs_t duplicate_vecs = {
-  nullptr,
-  duplicate_process,
-  nullptr,
-  nullptr,
-  dup_args
-};
 #endif
diff --git a/duplicate.h b/duplicate.h
new file mode 100644 (file)
index 0000000..64a3050
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+    exact duplicate point filter utility.
+
+    Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef DUPLICATE_H_INCLUDED_
+#define DUPLICATE_H_INCLUDED_
+
+#include "defs.h"    // for ARGTYPE_BOOL, ARG_NOMINMAX, Waypoint (ptr only)
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class DuplicateFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void process() override;
+
+private:
+  char* snopt = nullptr;
+  char* lcopt = nullptr;
+  char* purge_duplicates = nullptr;
+  char* correct_coords = nullptr;
+
+  arglist_t args[5] = {
+    {
+      "shortname", &snopt, "Suppress duplicate waypoints based on name",
+      nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "location", &lcopt, "Suppress duplicate waypoint based on coords",
+      nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "all", &purge_duplicates, "Suppress all instances of duplicates",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "correct", &correct_coords, "Use coords from duplicate points",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  typedef struct btree_node {
+    struct btree_node* left, *right;
+    unsigned long data;
+    Waypoint* wpt;
+  } btree_node;
+
+  btree_node* addnode(btree_node* tree, btree_node* newnode, btree_node** oldnode);
+  void free_tree(btree_node* tree);
+
+  typedef struct {
+    Waypoint* wpt;
+    int index;
+  } wpt_ptr;
+
+  static int compare(const void* a, const void* b);
+
+};
+#endif
+#endif // DUPLICATE_H_INCLUDED_
diff --git a/filter.h b/filter.h
new file mode 100644 (file)
index 0000000..20c31d5
--- /dev/null
+++ b/filter.h
@@ -0,0 +1,106 @@
+/*
+    Filter Base Class
+
+    Copyright (C) 2018 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+*/
+#ifndef FILTER_H_INCLUDED_
+#define FILTER_H_INCLUDED_
+
+#include "defs.h"
+
+class Filter
+{
+public:
+  virtual arglist_t* get_args() = 0;
+
+  virtual void init()
+  {
+    /* Called before filter processing */
+
+    /* optional.  If not needed, delete and replace entry in vecs with NULL  */
+
+    /* This may be used to parse filter options, allocate memory, and do other
+     * housekeeping that should be done before filtering */
+  }
+
+  virtual void process() = 0;  /* this procedure must be present in vecs */
+//{
+// Here is how you register callbacks for all waypoints, routes, tracks.
+// waypt_disp_all(waypt)
+// route_disp_all(head, tail, rtept);
+// track_disp_all(head, tail, trkpt);
+//}
+
+  virtual void deinit()
+  {
+    /* called after filter processing */
+
+    /* optional.   If not needed, delete and replace entry in vecs with NULL */
+
+    /* This should be used to clean up any memory allocations that are no longer
+     * needed after the filter terminates. */
+  }
+
+  virtual void exit()
+  {
+    /* called on program exit */
+
+    /* optional.   If not needed, delete and replace entry in vecs with NULL */
+
+    /* You should not need this for simple filters, but it may be used to
+     * clean up memory allocations that must persist from one invocation of
+     * your filter to the next (for example, the stack in the stack filter.)
+     * Note that this member will be called even if your filter has not been
+     * used, so it *cannot* assume that _init or _process has been called
+     * previously. */
+  }
+
+protected:
+  template <class MyFilter>
+  class RteHdFunctor
+  {
+  public:
+    typedef void (MyFilter::*RteHdCb)(const route_head*);
+    RteHdFunctor(MyFilter* obj, RteHdCb cb) : that(obj), _cb(cb) {}
+    void operator()(const route_head* rh)
+    {
+      ((that)->*(_cb))(rh);
+    }
+
+  private:
+    MyFilter* that;
+    RteHdCb _cb;
+  };
+
+  template <class MyFilter>
+  class WayptFunctor
+  {
+  public:
+    typedef void (MyFilter::*WayptCb)(const Waypoint*);
+    WayptFunctor(MyFilter* obj, WayptCb cb) : that(obj), _cb(cb) {}
+    void operator()(const Waypoint* wpt)
+    {
+      ((that)->*(_cb))(wpt);
+    }
+
+  private:
+    MyFilter* that;
+    WayptCb _cb;
+  };
+
+};
+#endif // FILTER_H_INCLUDED_
index 98edd08aeb6f3111e620de3828bb30d6566783fa..cc66864fcf561085319f16761e52cd053b42dae9 100644 (file)
  */
 
 #include "defs.h"
+#include "arcdist.h"
+#include "bend.h"
+#include "discard.h"
+#include "duplicate.h"
 #include "filterdefs.h"
+#include "filter.h"
+#include "height.h"
+#include "interpolate.h"
+#include "nukedata.h"
+#include "polygon.h"
+#include "position.h"
+#include "radius.h"
+#include "reverse_route.h"
+#include "smplrout.h"
+#include "sort.h"
+#include "stackfilter.h"
+#include "swapdata.h"
+#include "trackfilter.h"
+#include "transform.h"
+#include "validate.h"
 #include "gbversion.h"
 #include "inifile.h"
 #include <QtCore/QStringList>
 #include <cstdlib> // qsort
 
 typedef struct {
-  filter_vecs_t* vec;
+  Filter* vec;
   const char* name;
   const char* desc;
 } fl_vecs_t;
 
-extern filter_vecs_t bend_vecs;
-extern filter_vecs_t position_vecs;
-extern filter_vecs_t radius_vecs;
-extern filter_vecs_t duplicate_vecs;
-extern filter_vecs_t arcdist_vecs;
-extern filter_vecs_t polygon_vecs;
-extern filter_vecs_t routesimple_vecs;
-extern filter_vecs_t reverse_route_vecs;
-extern filter_vecs_t sort_vecs;
-extern filter_vecs_t stackfilt_vecs;
-extern filter_vecs_t trackfilter_vecs;
-extern filter_vecs_t discard_vecs;
-extern filter_vecs_t nuke_vecs;
-extern filter_vecs_t interpolatefilt_vecs;
-extern filter_vecs_t transform_vecs;
-extern filter_vecs_t height_vecs;
-extern filter_vecs_t swapdata_vecs;
-extern filter_vecs_t validate_vecs;
+ArcDistanceFilter arcdist;
+BendFilter bend;
+DiscardFilter discard;
+DuplicateFilter duplicate;
+HeightFilter height;
+InterpolateFilter interpolate;
+NukeDataFilter nukedata;
+PolygonFilter polygon;
+PositionFilter position;
+RadiusFilter radius;
+ReverseRouteFilter reverse_route;
+SimplifyRouteFilter routesimple;
+SortFilter sort;
+StackFilter stackfilt;
+SwapDataFilter swapdata;
+TrackFilter trackfilter;
+TransformFilter transform;
+ValidateFilter validate;
+
 
 static
 fl_vecs_t filter_vec_list[] = {
 #if FILTERS_ENABLED
+    {
+      &arcdist,
+      "arc",
+      "Include Only Points Within Distance of Arc",
+    },
+    {
+      &bend,
+      "bend",
+      "Add points before and after bends in routes"
+    },
+    {
+      &discard,
+      "discard",
+      "Remove unreliable points with high hdop or vdop"
+    },
+    {
+      &duplicate,
+      "duplicate",
+      "Remove Duplicates",
+    },
+    {
+      &interpolate,
+      "interpolate",
+      "Interpolate between trackpoints"
+    },
+    {
+      &nukedata,
+      "nuketypes",
+      "Remove all waypoints, tracks, or routes"
+    },
+    {
+      &polygon,
+      "polygon",
+      "Include Only Points Inside Polygon",
+    },
+    {
+      &position,
+      "position",
+      "Remove Points Within Distance",
+    },
+    {
+      &radius,
+      "radius",
+      "Include Only Points Within Radius",
+    },
+    {
+      &routesimple,
+      "simplify",
+      "Simplify routes",
+    },
+    {
+      &sort,
+      "sort",
+      "Rearrange waypoints by resorting",
+    },
+    {
+      &stackfilt,
+      "stack",
+      "Save and restore waypoint lists"
+    },
+    {
+      &reverse_route,
+      "reverse",
+      "Reverse stops within routes",
+    },
+    {
+      &trackfilter,
+      "track",
+      "Manipulate track lists"
+    },
+    {
+      &transform,
+      "transform",
+      "Transform waypoints into a route, tracks into routes, ..."
+    },
+    {
+      &height,
+      "height",
+      "Manipulate altitudes"
+    },
+    {
+      &swapdata,
+      "swap",
+      "Swap latitude and longitude of all loaded points"
+    },
   {
-    &arcdist_vecs,
-    "arc",
-    "Include Only Points Within Distance of Arc",
-  },
-  {
-    &bend_vecs,
-    "bend",
-    "Add points before and after bends in routes"
-  },
-  {
-    &discard_vecs,
-    "discard",
-    "Remove unreliable points with high hdop or vdop"
-  },
-  {
-    &duplicate_vecs,
-    "duplicate",
-    "Remove Duplicates",
-  },
-  {
-    &interpolatefilt_vecs,
-    "interpolate",
-    "Interpolate between trackpoints"
-  },
-  {
-    &nuke_vecs,
-    "nuketypes",
-    "Remove all waypoints, tracks, or routes"
-  },
-  {
-    &polygon_vecs,
-    "polygon",
-    "Include Only Points Inside Polygon",
-  },
-  {
-    &position_vecs,
-    "position",
-    "Remove Points Within Distance",
-  },
-  {
-    &radius_vecs,
-    "radius",
-    "Include Only Points Within Radius",
-  },
-  {
-    &routesimple_vecs,
-    "simplify",
-    "Simplify routes",
-  },
-  {
-    &sort_vecs,
-    "sort",
-    "Rearrange waypoints by resorting",
-  },
-  {
-    &stackfilt_vecs,
-    "stack",
-    "Save and restore waypoint lists"
-  },
-  {
-    &reverse_route_vecs,
-    "reverse",
-    "Reverse stops within routes",
-  },
-  {
-    &trackfilter_vecs,
-    "track",
-    "Manipulate track lists"
-  },
-  {
-    &transform_vecs,
-    "transform",
-    "Transform waypoints into a route, tracks into routes, ..."
-  },
-  {
-    &height_vecs,
-    "height",
-    "Manipulate altitudes"
-  },
-  {
-    &swapdata_vecs,
-    "swap",
-    "Swap latitude and longitude of all loaded points"
-  },
-  {
-    &validate_vecs,
+    &validate,
     "validate",
     "Validate internal data structures"
   },
 
 #elif defined (MINIMAL_FILTERS)
   {
-    &trackfilter_vecs,
+    &trackfilter,
     "track",
     "Manipulate track lists"
   },
@@ -161,7 +181,7 @@ fl_vecs_t filter_vec_list[] = {
   }
 };
 
-filter_vecs_t*
+Filter*
 find_filter_vec(const char* const vecname, const char** opts)
 {
   fl_vecs_t* vec = filter_vec_list;
@@ -179,8 +199,9 @@ find_filter_vec(const char* const vecname, const char** opts)
     }
 
     /* step 1: initialize by inifile or default values */
-    if (vec->vec->args) {
-      for (ap = vec->vec->args; ap->argstring; ap++) {
+    struct arglist* args = vec->vec->get_args();
+    if (args) {
+      for (ap = args; ap->argstring; ap++) {
         const char* temp;
 
         temp = inifile_readstr(global_opts.inifile, vec->name, ap->argstring);
@@ -199,8 +220,8 @@ find_filter_vec(const char* const vecname, const char** opts)
     if (res) {
       *opts = res+1;
 
-      if (vec->vec->args) {
-        for (ap = vec->vec->args; ap->argstring; ap++) {
+      if (args) {
+        for (ap = args; ap->argstring; ap++) {
           char* opt;
 
           opt = get_option(*opts, ap->argstring);
@@ -219,7 +240,7 @@ find_filter_vec(const char* const vecname, const char** opts)
     }
 
     if (global_opts.debug_level >= 1) {
-      disp_vec_options(vec->name, vec->vec->args);
+      disp_vec_options(vec->name, args);
     }
 
     xfree(v);
@@ -231,12 +252,13 @@ find_filter_vec(const char* const vecname, const char** opts)
 }
 
 void
-free_filter_vec(filter_vecs_t* fvec)
+free_filter_vec(Filter* filter)
 {
   arglist_t* ap;
+  struct arglist* args = filter->get_args();
 
-  if (fvec->args) {
-    for (ap = fvec->args; ap->argstring; ap++) {
+  if (args) {
+    for (ap = args; ap->argstring; ap++) {
       if (ap->argvalptr) {
         xfree(ap->argvalptr);
         ap->argvalptr = *ap->argval = nullptr;
@@ -251,8 +273,9 @@ init_filter_vecs()
   fl_vecs_t* vec = filter_vec_list;
   while (vec->vec) {
     arglist_t* ap;
-    if (vec->vec->args) {
-      for (ap = vec->vec->args; ap->argstring; ap++) {
+    struct arglist* args = vec->vec->get_args();
+    if (args) {
+      for (ap = args; ap->argstring; ap++) {
         ap->argvalptr = nullptr;
       }
     }
@@ -265,9 +288,7 @@ exit_filter_vecs()
 {
   fl_vecs_t* vec = filter_vec_list;
   while (vec->vec) {
-    if (vec->vec->f_exit) {
-      (vec->vec->f_exit)();
-    }
+      (vec->vec->exit)();
     vec++;
   }
 }
@@ -285,7 +306,8 @@ disp_filter_vecs()
   for (vec = filter_vec_list; vec->vec; vec++) {
     printf("   %-20.20s  %-50.50s\n",
            vec->name, vec->desc);
-    for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+    struct arglist* args = vec->vec->get_args();
+    for (ap = args; ap && ap->argstring; ap++) {
       if (!(ap->argtype & ARGTYPE_HIDDEN))
         printf("         %-18.18s    %-.50s %s\n",
                ap->argstring, ap->helpstring,
@@ -306,7 +328,8 @@ disp_filter_vec(const char* vecname)
     }
     printf("   %-20.20s  %-50.50s\n",
            vec->name, vec->desc);
-    for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+    struct arglist* args = vec->vec->get_args();
+    for (ap = args; ap && ap->argstring; ap++) {
       if (!(ap->argtype & ARGTYPE_HIDDEN))
         printf("         %-18.18s    %-.50s %s\n",
                ap->argstring, ap->helpstring,
@@ -321,7 +344,7 @@ alpha(const void* a, const void* b)
   const fl_vecs_t* const ap = (const fl_vecs_t*) a;
   const fl_vecs_t* const bp = (const fl_vecs_t*) b;
 
-  return case_ignore_strcmp(ap->desc , bp->desc);
+  return case_ignore_strcmp(ap->desc, bp->desc);
 }
 
 static
@@ -340,7 +363,8 @@ disp_v1(const fl_vecs_t* vec)
 
   disp_help_url(vec, nullptr);
   printf("\n");
-  for (ap = vec->vec->args; ap && ap->argstring; ap++) {
+  struct arglist* args = vec->vec->get_args();
+  for (ap = args; ap && ap->argstring; ap++) {
     if (!(ap->argtype & ARGTYPE_HIDDEN)) {
       printf("option\t%s\t%s\t%s\t%s\t%s\t%s\t%s",
              vec->name,
index 8b14a165eb198f3de88a23336849f0a1ef50aa97..6a704b497f5122fd830a184099a1a961900ecc8d 100644 (file)
@@ -26,6 +26,9 @@
  * This is our (weak) attempt to make that distinction.
  */
 
+#ifndef FILTERDEFS_H_INCLUDED_
+#define FILTERDEFS_H_INCLUDED_
+
 #if NEWQ
 #include <QtCore/QList>
 extern QList<Waypoint*> waypt_list;
@@ -33,8 +36,9 @@ extern QList<Waypoint*> waypt_list;
 #include "queue.h"
 extern queue waypt_head;
 #endif
+#include "filter.h"
 
-typedef void (*filter_init)(char const*);
+typedef void (*filter_init)(void);
 typedef void (*filter_process)(void);
 typedef void (*filter_deinit)(void);
 typedef void (*filter_exit)(void);
@@ -47,8 +51,8 @@ typedef struct filter_vecs {
   struct arglist* args;
 } filter_vecs_t;
 
-filter_vecs_t* find_filter_vec(const char* const, const char**);
-void free_filter_vec(filter_vecs_t*);
+Filter* find_filter_vec(const char* const, const char**);
+void free_filter_vec(Filter*);
 void disp_filters(int version);
 void disp_filter(const char* vecname);
 void disp_filter_vec(const char* vecname);
@@ -56,3 +60,4 @@ void disp_filter_vecs(void);
 void init_filter_vecs(void);
 void exit_filter_vecs(void);
 
+#endif // FILTERDEFS_H_INCLUDED_
index 5217b2992cc478b1b91cbdfb3fbe2fd6d29b19ae..4f3b87c199bea3f62ac1b39440a8da52e46c2623 100644 (file)
--- a/height.cc
+++ b/height.cc
 
 #include "defs.h"
 #include "filterdefs.h"
+#include "height.h"
 #include <cmath>
 #include <cstdlib>
 
 #define MYNAME "height"
 
 #if FILTERS_ENABLED
-static char* addopt        = nullptr;
-static char* wgs84tomslopt = nullptr;
-static double addf;
-
-
-static
-arglist_t height_args[] = {
-  {
-    "add", &addopt, "Adds a constant value to every altitude (meter, append \"f\" (x.xxf) for feet)",
-    nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "wgs84tomsl", &wgs84tomslopt, "Converts WGS84 ellipsoidal height to orthometric height (MSL)",
-    nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-
-static double bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22)
+
+double HeightFilter::bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22)
 {
   double delta;
 
@@ -68,11 +51,10 @@ static double bilinear(double x1, double y1, double x2, double y2, double x, dou
   return (z22*(y-y1)*(x-x1)+z12*(y2-y)*(x-x1)+z21*(y-y1)*(x2-x)+z11*(y2-y)*(x2-x))/delta;
 }
 
-
 /* return geoid separation (MSL - WGS84) in meters, given a lat/lot in degrees */
-static double wgs84_separation(double lat, double lon)
+double HeightFilter::wgs84_separation(double lat, double lon)
 {
-#include "height.h"
+#include "heightgrid.h"
   int  ilat, ilon;
   int  ilat1, ilat2, ilon1, ilon2;
 
@@ -103,9 +85,7 @@ static double wgs84_separation(double lat, double lon)
          );
 }
 
-
-static void
-correct_height(const Waypoint* wpt)
+void HeightFilter::correct_height(const Waypoint* wpt)
 {
   Waypoint* waypointp = (Waypoint*) wpt;
 
@@ -113,16 +93,14 @@ correct_height(const Waypoint* wpt)
     if (addopt) {
       waypointp->altitude += addf;
     }
-  
+
     if (wgs84tomslopt) {
-        waypointp->altitude -= wgs84_separation(waypointp->latitude, waypointp->longitude);
+      waypointp->altitude -= wgs84_separation(waypointp->latitude, waypointp->longitude);
     }
   }
 }
 
-
-static void
-height_init(const char*)
+void HeightFilter::init()
 {
   char* unit;
 
@@ -139,23 +117,13 @@ height_init(const char*)
   }
 }
 
-
-static void
-height_process()       /* this procedure must be present in vecs */
+void HeightFilter::process()
 {
-  waypt_disp_all(correct_height);
-  route_disp_all(nullptr, nullptr, correct_height);
-  track_disp_all(nullptr, nullptr, correct_height);
-}
-
-
-filter_vecs_t height_vecs = {
-  height_init,
-  height_process,
-  nullptr,
-  nullptr,
-  height_args
-};
+  WayptFunctor<HeightFilter> correct_height_f(this, &HeightFilter::correct_height);
 
+  waypt_disp_all(correct_height_f);
+  route_disp_all(nullptr, nullptr, correct_height_f);
+  track_disp_all(nullptr, nullptr, correct_height_f);
+}
 
 #endif // FILTERS_ENABLED
index 56fe5b4b1f4202c671eeac3e075b7c594528e0a5..1c1b14b8a671a4f75890f30f6a9257b0e7c667f5 100644 (file)
--- a/height.h
+++ b/height.h
@@ -1,5 +1,9 @@
 /*
-    Copyright (C) 2013  Robert Lipe, robertlipe+source@gpsbabel.org
+       Copyright (C) 2008 Alexander Stapff, a.stapff@gmx.de
+
+       Geoid separation code by Oleg Gusev, from data by Peter Dana.
+       This code was published by the gpsd project (http://gpsd.berlios.de/)
+       under the BSD license.
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
 
  */
+
 #ifndef HEIGHT_H_INCLUDED_
 #define HEIGHT_H_INCLUDED_
 
-/* Created by "tools/createGeoidGrid 1.0 int8_t" using GeographicLib utility GeoidEval with egm96-5. */
+#include "defs.h"    // for ARG_NOMINMAX, Waypoint (ptr only), arglist_t
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class HeightFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
 
-#include <cstdint>
+private:
+  char* addopt        = nullptr;
+  char* wgs84tomslopt = nullptr;
+  double addf;
+
+  arglist_t args[3] = {
+    {
+      "add", &addopt, "Adds a constant value to every altitude (meter, append \"f\" (x.xxf) for feet)",
+      nullptr, ARGTYPE_BEGIN_REQ | ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+    },
+    {
+      "wgs84tomsl", &wgs84tomslopt, "Converts WGS84 ellipsoidal height to orthometric height (MSL)",
+      nullptr, ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  double bilinear(double x1, double y1, double x2, double y2, double x, double y, double z11, double z12, double z21, double z22);
+  double wgs84_separation(double lat, double lon);
+  void correct_height(const Waypoint* wpt);
 
-#define GEOID_GRID_DEG 1.0
-#define GEOID_SCALE 1.0
-#define GEOID_ROW 181
-#define GEOID_COL 361
-static const int8_t geoid_delta[GEOID_COL* GEOID_ROW]= {
-  /*         -180,-179,-178,-177,-176,-175,-174,-173,-172,-171,-170,-169,-168,-167,-166,-165,-164,-163,-162,-161,-160,-159,-158,-157,-156,-155,-154,-153,-152,-151,-150,-149,-148,-147,-146,-145,-144,-143,-142,-141,-140,-139,-138,-137,-136,-135,-134,-133,-132,-131,-130,-129,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180 */
-  /* -90.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
-  /* -89.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
-  /* -88.0 */ -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30,
-  /* -87.0 */ -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -27, -27, -28, -28, -28, -28, -28, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32,
-  /* -86.0 */ -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -32, -32, -32, -32, -32, -33, -33, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -31, -31, -30, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -21, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -16, -16, -16, -16, -16, -17, -17, -17, -17, -17, -18, -18, -18, -18, -19, -19, -19, -19, -20, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -26, -26, -27, -27, -27, -28, -28, -28, -29, -29, -29, -30, -30, -30, -31, -31, -31, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33,
-  /* -85.0 */ -37, -38, -39, -39, -40, -40, -40, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, -38, -37, -37, -38, -38, -38, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -35, -34, -34, -33, -32, -32, -31, -30, -30, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -27, -27, -28, -28, -29, -29, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -25, -25, -25, -25, -25, -25, -24, -23, -22, -21, -19, -18, -18, -17, -17, -17, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -24, -24, -24, -25, -25, -26, -26, -26, -27, -28, -28, -29, -29, -30, -30, -31, -32, -32, -32, -33, -33, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -35, -35, -36, -36, -37, -37, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -35, -36, -37,
-  /* -84.0 */ -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -25, -25, -26, -26, -26, -25, -25, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -21, -21, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10,  -9,  -9,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -21, -22, -22, -22, -23, -23, -24, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -35, -35, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -36, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -36, -37, -38, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -44,
-  /* -83.0 */ -45, -45, -46, -46, -46, -46, -46, -46, -46, -46, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -32, -32, -31, -31, -30, -30, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -24, -24, -23, -22, -22, -21, -21, -20, -20, -20, -21, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -16, -16, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -11, -10, -10,  -9,  -8,  -6,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9, -10, -10, -11, -11, -12, -12, -13, -14, -15, -15, -16, -17, -18, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -25, -25, -26, -27, -28, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -37, -38, -38, -39, -39, -40, -40, -41, -41, -42, -42, -43, -44, -44, -44, -45, -45, -45, -45, -45, -45,
-  /* -82.0 */ -48, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -40, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -24, -24, -24, -23, -22, -21, -20, -20, -20, -20, -19, -19, -19, -18, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,  -0,   0,   1,   1,   1,   1,   1,   1,   0,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   1,   1,   0,  -0,  -1,  -1,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -6,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -21, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -40, -40, -41, -41, -42, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -42, -41, -40, -40, -41, -42, -44, -45, -45, -46, -46, -46, -47, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -48, -48,
-  /* -81.0 */ -50, -50, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -35, -35, -34, -33, -32, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -22, -22, -22, -21, -21, -20, -20, -20, -20, -20, -20, -19, -19, -18, -18, -17, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   0,   1,   2,   2,   3,   3,   3,   2,   2,   2,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   4,   5,   5,   6,   6,   5,   5,   5,   5,   4,   4,   4,   4,   3,   4,   4,   4,   4,   5,   5,   5,   5,   5,   5,   4,   3,   2,   2,   1,   1,  -0,  -1,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -10, -11, -11, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -49, -49, -50, -49, -48, -47, -45, -45, -46, -47, -48, -50, -50, -50, -50, -49, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
-  /* -80.0 */ -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -53, -53, -53, -53, -53, -53, -52, -52, -52, -52, -52, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -45, -44, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -36, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -23, -22, -22, -22, -22, -23, -24, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -21, -21, -21, -22, -22, -22, -22, -22, -21, -21, -20, -19, -18, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -17, -17, -17, -18, -19, -19, -18, -17, -16, -15, -15, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   1,   1,   2,   2,   3,   3,   4,   4,   4,   4,   4,   3,   3,   2,   2,   2,   3,   3,   3,   4,   4,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   7,   8,   9,   9,   9,   8,   8,   7,   7,   7,   6,   5,   5,   4,   4,   4,   5,   5,   5,   5,   5,   6,   6,   6,   5,   4,   4,   3,   3,   2,   2,   1,   0,  -0,  -1,  -1,  -2,  -3,  -4,  -6,  -7,  -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -27, -28, -29, -30, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -51, -51, -51, -51, -51, -51, -52, -53, -54, -55, -54, -54, -53, -52, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -52, -52, -52, -52, -53,
-  /* -79.0 */ -54, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -54, -54, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -51, -51, -50, -50, -50, -50, -50, -51, -51, -51, -50, -49, -48, -47, -47, -46, -46, -45, -44, -43, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -34, -34, -33, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -23, -22, -21, -20, -19, -18, -16, -15, -17, -20, -23, -25, -25, -24, -23, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -15, -15, -15, -14, -13, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -0,  -0,   0,   1,   1,   2,   2,   2,   3,   3,   3,   4,   4,   4,   5,   5,   6,   6,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   9,   9,  10,  10,  10,  10,   9,   8,   8,   7,   7,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   3,   3,   2,   2,   1,   0,  -0,  -1,  -2,  -2,  -3,  -3,  -5,  -7,  -8, -10, -11, -12, -12, -13, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -51, -51, -52, -52, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -54, -56, -57, -57, -56, -55, -54, -53, -53, -53, -52, -52, -53, -53, -53, -52, -52, -53, -53, -54, -54, -54,
-  /* -78.0 */ -56, -56, -57, -57, -57, -57, -57, -56, -56, -56, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -55, -54, -54, -54, -53, -53, -53, -54, -54, -54, -53, -52, -52, -52, -51, -51, -51, -50, -51, -51, -51, -51, -49, -48, -47, -46, -46, -45, -45, -44, -42, -41, -40, -40, -39, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -30, -29, -28, -27, -26, -24, -22, -21, -20, -19, -17, -15, -13, -15, -18, -22, -24, -24, -22, -21, -20, -20, -21, -21, -21, -21, -20, -19, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -15, -16, -16, -16, -15, -14, -14, -14, -14, -15, -15, -15, -15, -15, -14, -14, -14, -13, -11, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -2,  -3,  -2,  -2,  -1,  -0,   0,   1,   1,   2,   2,   2,   3,   3,   4,   4,   4,   5,   6,   6,   7,   7,   7,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  11,  10,  10,   9,   9,   9,   9,   8,   8,   7,   7,   6,   6,   6,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   2,   2,   1,   1,  -0,  -1,  -2,  -2,  -2,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -22, -22, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -43, -44, -44, -45, -46, -47, -49, -50, -50, -51, -51, -52, -53, -54, -55, -55, -56, -56, -57, -57, -57, -56, -56, -56, -55, -55, -54, -53, -52, -52, -53, -54, -55, -55, -54, -53, -53, -53, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -55, -56, -56,
-  /* -77.0 */ -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -59, -59, -59, -58, -57, -57, -57, -57, -56, -56, -56, -56, -55, -55, -55, -55, -54, -53, -53, -52, -51, -50, -49, -48, -47, -46, -46, -45, -44, -43, -43, -43, -42, -42, -41, -40, -39, -38, -37, -36, -36, -37, -37, -38, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -24, -23, -22, -21, -21, -20, -19, -18, -18, -18, -20, -20, -20, -18, -17, -16, -17, -19, -21, -21, -20, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10,  -9,  -7,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -2,  -1,   0,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   2,   2,   2,   1,   1,   2,   2,   3,   4,   4,   4,   5,   5,   6,   6,   6,   6,   7,   8,   9,   9,  10,  10,  10,  11,  11,  12,  12,  13,  13,  13,  13,  13,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  10,  10,   9,   9,  10,  10,  10,   9,   8,   7,   7,   6,   6,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   2,   2,   2,   1,   1,   0,   0,  -0,  -1,  -2,  -3,  -4,  -5,  -7,  -8,  -9, -10, -12, -14, -16, -18, -19, -19, -19, -19, -20, -20, -21, -22, -24, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -44, -45, -45, -46, -48, -49, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -53, -52, -53, -54, -55, -55, -55, -55, -55, -55, -55, -56, -57, -57, -56, -55, -55, -56, -56, -57, -57, -57, -58,
-  /* -76.0 */ -60, -60, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62, -62, -62, -63, -63, -63, -63, -63, -63, -61, -60, -58, -57, -56, -55, -54, -54, -53, -52, -50, -49, -48, -47, -45, -44, -43, -43, -42, -41, -41, -40, -41, -41, -40, -38, -37, -36, -36, -36, -36, -36, -37, -37, -37, -36, -36, -36, -36, -35, -33, -32, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -22, -21, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -19, -18, -18, -17, -18, -18, -17, -15, -13, -13, -13, -13, -14, -15, -15, -14, -13, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -1,  -1,  -0,   1,   3,   4,   5,   5,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,   7,   7,   8,   8,   8,   9,   9,  10,  10,  10,  11,  12,  12,  12,  13,  13,  13,  14,  14,  15,  15,  15,  15,  15,  15,  15,  14,  13,  12,  13,  13,  13,  13,  12,  12,  12,  13,  13,  13,  13,  12,  12,  12,  12,  12,  13,  13,  13,  14,  13,  13,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  10,   9,   8,   7,   7,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   4,   4,   4,   4,   4,   3,   4,   4,   3,   0,  -2,  -4,  -5,  -5,  -6,  -7,  -8,  -9, -10, -12, -13, -15, -16, -17, -18, -18, -19, -20, -21, -23, -24, -26, -28, -29, -30, -32, -33, -35, -35, -36, -37, -37, -38, -39, -40, -41, -41, -41, -42, -43, -45, -46, -47, -49, -50, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -58, -58, -57, -57, -56, -56, -57, -57, -56, -55, -54, -55, -57, -58, -58, -58, -57, -57, -57, -57, -58, -58, -58, -58, -57, -58, -58, -58, -59, -59, -60,
-  /* -75.0 */ -62, -62, -62, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -64, -64, -64, -64, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -60, -58, -56, -54, -52, -51, -50, -49, -48, -47, -47, -46, -44, -44, -44, -44, -44, -43, -42, -40, -39, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -37, -36, -35, -33, -32, -31, -30, -30, -29, -29, -28, -27, -27, -26, -26, -26, -26, -25, -25, -24, -23, -22, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -17, -16, -16, -15, -15, -16, -15, -13, -12, -10,  -9,  -8,  -7,  -6,  -6,  -5,  -5,  -6,  -9, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   2,   3,   4,   5,   6,   8,   9,  10,  10,  10,  11,  11,  11,  11,  11,  11,  10,   9,   9,   9,  10,  11,  11,  11,  11,  12,  13,  13,  13,  14,  14,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  16,  16,  15,  15,  15,  16,  16,  16,  15,  14,  15,  16,  16,  16,  16,  16,  16,  16,  15,  15,  16,  17,  17,  16,  15,  15,  15,  14,  14,  14,  13,  12,  12,  12,  13,  13,  13,  12,  11,  10,   9,   9,   9,   8,   8,   8,   8,   8,   7,   7,   7,   6,   6,   6,   6,   6,   5,   5,   5,   4,   2,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -11, -12, -14, -15, -16, -17, -18, -19, -21, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -38, -39, -41, -42, -42, -43, -43, -45, -46, -48, -48, -48, -48, -49, -50, -51, -51, -52, -53, -54, -55, -55, -56, -57, -57, -57, -58, -58, -58, -58, -58, -58, -58, -58, -59, -58, -56, -54, -54, -55, -57, -58, -58, -58, -58, -58, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62,
-  /* -74.0 */ -61, -62, -63, -63, -64, -65, -65, -65, -65, -66, -66, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -63, -63, -63, -63, -62, -62, -61, -61, -60, -59, -59, -58, -58, -57, -56, -55, -53, -51, -50, -49, -49, -49, -49, -47, -45, -43, -43, -43, -41, -40, -39, -39, -38, -38, -37, -37, -37, -37, -38, -38, -38, -36, -35, -33, -32, -31, -31, -30, -30, -29, -28, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -19, -19, -18, -18, -18, -17, -16, -16, -16, -16, -17, -16, -16, -14, -13, -13, -13, -12, -11, -10,  -8,  -7,  -6,  -6,  -5,  -3,  -2,  -1,  -1,  -1,  -2,  -4,  -6,  -7,  -7,  -7,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -2,  -1,  -1,  -0,  -0,  -1,  -1,  -1,  -2,  -2,  -1,  -1,  -0,   1,   1,   2,   2,   3,   3,   3,   4,   5,   6,   7,   7,   8,   9,  10,  11,  13,  14,  14,  13,  13,  12,  11,  11,  12,  13,  14,  14,  15,  15,  16,  16,  16,  17,  17,  18,  18,  18,  18,  19,  19,  19,  19,  19,  18,  18,  18,  18,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  19,  19,  20,  20,  20,  20,  20,  19,  18,  18,  18,  19,  19,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  17,  16,  14,  12,  12,  12,  13,  13,  13,  12,  11,  10,  10,   9,   9,   9,   8,   8,   7,   7,   6,   5,   5,   4,   3,   1,  -0,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -11, -12, -14, -15, -17, -18, -20, -21, -24, -26, -27, -28, -29, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -38, -39, -40, -41, -42, -42, -42, -44, -46, -47, -46, -45, -46, -47, -49, -50, -50, -50, -51, -51, -52, -53, -55, -56, -56, -57, -57, -58, -58, -58, -58, -59, -59, -59, -58, -57, -55, -53, -50, -48, -49, -53, -56, -58, -59, -58, -59, -59, -59, -59, -59, -59, -60, -60, -60, -61, -61,
-  /* -73.0 */ -61, -61, -62, -63, -64, -64, -65, -65, -66, -66, -66, -66, -66, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -62, -62, -61, -61, -60, -60, -59, -58, -58, -57, -57, -56, -55, -55, -54, -53, -52, -52, -51, -50, -50, -49, -47, -46, -45, -44, -42, -40, -40, -40, -39, -38, -38, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -32, -32, -31, -31, -29, -28, -27, -26, -25, -25, -24, -23, -22, -22, -22, -21, -21, -21, -20, -18, -18, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -5,  -3,  -2,  -1,   0,   1,   2,   3,   3,   2,  -1,  -3,  -4,  -4,  -4,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -2,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,   0,   1,   2,   3,   4,   6,   7,   7,   7,   7,   8,   8,   8,   9,  11,  13,  15,  15,  14,  13,  12,  13,  13,  14,  15,  16,  17,  18,  18,  19,  18,  18,  18,  18,  19,  19,  19,  19,  19,  20,  20,  20,  20,  20,  19,  19,  20,  23,  23,  22,  21,  21,  21,  20,  21,  22,  22,  22,  21,  22,  22,  23,  23,  24,  23,  22,  22,  21,  21,  21,  22,  22,  21,  21,  20,  20,  19,  19,  19,  19,  19,  19,  20,  21,  21,  20,  20,  20,  20,  20,  19,  17,  14,  12,  13,  14,  15,  16,  16,  14,  13,  13,  13,  12,  11,  11,  10,   9,   8,   7,   6,   5,   5,   4,   3,   2,   0,  -0,  -1,  -3,  -5,  -7,  -8,  -9, -11, -13, -15, -17, -18, -20, -22, -24, -27, -28, -29, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -40, -38, -39, -41, -43, -43, -43, -43, -45, -46, -48, -50, -49, -49, -49, -50, -51, -52, -53, -54, -55, -56, -57, -57, -57, -58, -58, -58, -59, -58, -58, -56, -55, -54, -52, -51, -51, -52, -55, -58, -58, -57, -57, -58, -58, -58, -58, -59, -60, -61, -61, -61, -61,
-  /* -72.0 */ -62, -62, -62, -62, -63, -64, -65, -66, -66, -66, -66, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -60, -60, -59, -59, -59, -58, -57, -56, -56, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -41, -40, -39, -38, -37, -35, -34, -33, -33, -33, -33, -32, -32, -31, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -23, -22, -21, -21, -22, -22, -22, -20, -18, -17, -17, -17, -16, -15, -15, -15, -14, -13, -13, -12, -12, -11, -10,  -9,  -7,  -6,  -4,  -2,  -0,   2,   2,   3,   4,   6,   7,   7,   6,   3,   1,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   1,   2,   4,   6,   7,   8,   8,   8,   9,  10,  10,  10,  12,  14,  14,  13,  13,  13,  12,  12,  13,  13,  14,  16,  17,  18,  17,  17,  16,  15,  16,  15,  15,  16,  16,  16,  17,  18,  17,  17,  18,  19,  20,  21,  23,  23,  21,  20,  21,  22,  22,  22,  22,  23,  25,  26,  26,  26,  26,  26,  25,  25,  24,  22,  21,  22,  23,  24,  24,  24,  24,  23,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  20,  18,  16,  14,  13,  13,  13,  13,  14,  15,  15,  15,  15,  15,  14,  13,  13,  12,  11,  10,   9,   8,   6,   5,   5,   4,   3,   2,   1,  -1,  -3,  -5,  -6,  -8,  -9, -11, -12, -14, -16, -17, -19, -20, -22, -24, -26, -27, -27, -28, -29, -30, -31, -32, -32, -32, -32, -33, -34, -35, -36, -37, -38, -37, -37, -38, -39, -40, -40, -41, -42, -43, -45, -48, -50, -51, -51, -50, -50, -51, -52, -52, -53, -54, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -53, -55, -56, -57, -56, -55, -55, -56, -55, -53, -54, -56, -58, -58, -58, -59, -60, -61, -61, -62, -62,
-  /* -71.0 */ -61, -61, -62, -63, -64, -65, -65, -65, -64, -65, -66, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -61, -61, -60, -60, -59, -59, -58, -58, -57, -57, -56, -56, -55, -54, -53, -53, -52, -51, -51, -50, -49, -48, -47, -47, -46, -45, -44, -43, -43, -42, -42, -41, -40, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -34, -34, -33, -32, -32, -30, -28, -27, -27, -26, -25, -24, -24, -23, -22, -22, -22, -21, -20, -18, -17, -17, -16, -15, -14, -14, -14, -14, -14, -13, -12, -11, -11, -10, -10,  -8,  -7,  -6,  -4,  -3,  -1,   0,   3,   4,   5,   7,  10,  11,  11,  10,   8,   5,   4,   3,   2,   1,   1,  -0,  -1,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,   5,   7,   8,  10,  11,  11,  11,  11,  11,  11,  10,  11,  11,  11,  13,  13,  13,  12,  13,  13,  14,  14,  14,  13,  12,  12,  11,  11,  11,  12,  13,  14,  15,  16,  16,  16,  18,  20,  22,  22,  22,  22,  21,  20,  20,  21,  22,  22,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  24,  25,  25,  26,  26,  25,  24,  23,  23,  23,  23,  22,  23,  23,  22,  21,  23,  25,  25,  25,  23,  21,  18,  15,  15,  16,  16,  16,  16,  16,  16,  15,  16,  16,  15,  15,  14,  13,  12,  11,  10,   9,   8,   7,   6,   5,   3,   1,  -1,  -2,  -4,  -5,  -6,  -7,  -9, -10, -11, -13, -14, -15, -17, -18, -19, -20, -22, -24, -25, -26, -27, -27, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -35, -36, -37, -38, -39, -39, -40, -42, -43, -44, -46, -47, -48, -49, -49, -50, -51, -52, -52, -52, -53, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -55, -57, -59, -59, -60, -59, -58, -58, -58, -57, -57, -58, -59, -59, -59, -59, -60, -61, -61, -61, -61,
-  /* -70.0 */ -62, -62, -63, -64, -64, -64, -64, -64, -63, -63, -63, -63, -63, -63, -62, -62, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, -60, -59, -58, -58, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -50, -49, -48, -47, -47, -46, -45, -45, -44, -43, -42, -41, -40, -40, -40, -40, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -27, -27, -27, -25, -22, -21, -22, -22, -21, -19, -17, -15, -13, -12, -11, -10, -10, -10, -10,  -9,  -7,  -6,  -4,  -4,  -3,  -2,   0,   2,   4,   5,   7,  10,  12,  13,  13,  11,   8,   6,   5,   4,   4,   4,   2,   1,  -1,  -1,  -1,  -0,   0,   1,   1,   1,   1,   2,   2,   2,   2,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   4,   5,   6,   7,   8,   9,  10,  10,  10,  10,  11,  11,  10,  11,  13,  14,  14,  14,  15,  15,  15,  15,  15,  14,  14,  14,  14,  16,  17,  17,  17,  18,  18,  17,  16,  16,  17,  19,  20,  21,  21,  21,  21,  20,  20,  21,  21,  20,  21,  22,  21,  21,  20,  19,  20,  21,  22,  23,  25,  27,  27,  26,  27,  27,  26,  27,  27,  28,  28,  28,  27,  26,  26,  26,  25,  26,  26,  25,  26,  28,  28,  26,  24,  22,  20,  17,  17,  17,  17,  17,  17,  16,  16,  16,  15,  16,  16,  15,  14,  14,  13,  12,  11,  11,   9,   8,   8,   7,   6,   4,   3,   1,  -1,  -2,  -4,  -6,  -7,  -9, -10, -12, -13, -14, -16, -17, -18, -18, -19, -19, -22, -24, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -32, -33, -34, -34, -36, -37, -37, -38, -38, -39, -42, -44, -44, -43, -43, -44, -45, -46, -47, -49, -51, -51, -51, -52, -54, -55, -55, -56, -57, -56, -56, -56, -56, -55, -55, -56, -57, -57, -57, -57, -57, -58, -59, -59, -59, -59, -58, -58, -59, -59, -59, -60, -60, -61, -61, -62,
-  /* -69.0 */ -61, -61, -61, -62, -63, -63, -63, -63, -62, -61, -61, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -58, -59, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -49, -48, -47, -46, -45, -45, -44, -43, -42, -42, -41, -40, -40, -39, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -29, -29, -28, -28, -27, -26, -26, -25, -25, -25, -24, -22, -21, -19, -17, -16, -16, -16, -15, -14, -14, -13, -12, -11,  -9,  -8,  -7,  -7,  -6,  -4,  -3,  -2,   0,   3,   4,   5,   6,   7,   9,  11,  12,  11,   9,   8,   7,   7,   6,   7,   7,   6,   5,   3,   3,   3,   4,   4,   4,   5,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,   5,   4,   4,   3,   3,   3,   3,   2,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   5,   5,   5,   5,   5,   6,   6,   7,   7,   8,   8,   9,  10,   9,   9,   9,   9,  10,  11,  10,  10,  11,  11,  12,  13,  13,  14,  14,  14,  15,  16,  15,  15,  16,  16,  16,  15,  15,  15,  16,  16,  16,  17,  17,  18,  18,  18,  19,  21,  23,  23,  23,  24,  24,  22,  21,  21,  21,  23,  24,  24,  25,  27,  28,  28,  28,  26,  27,  29,  31,  33,  34,  32,  30,  30,  30,  29,  28,  28,  27,  27,  28,  29,  29,  27,  25,  23,  22,  20,  19,  18,  17,  16,  16,  16,  16,  17,  17,  17,  16,  15,  14,  14,  13,  13,  12,  11,  11,  10,   9,   9,   8,   8,   7,   5,   2,   0,  -2,  -5,  -6,  -8, -10, -11, -13, -15, -16, -17, -18, -18, -19, -19, -20, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -30, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -40, -43, -43, -42, -42, -43, -44, -44, -46, -47, -48, -50, -51, -51, -52, -53, -53, -54, -54, -53, -53, -53, -53, -54, -55, -55, -55, -56, -57, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -60, -60, -60, -60, -61, -61,
-  /* -68.0 */ -58, -59, -60, -61, -61, -62, -61, -60, -59, -58, -58, -58, -58, -58, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -53, -53, -52, -52, -51, -50, -50, -49, -49, -48, -48, -47, -46, -46, -45, -44, -44, -43, -42, -41, -40, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -17, -16, -15, -14, -14, -13, -12, -11, -11, -10,  -9,  -8,  -7,  -5,  -3,  -1,   1,   2,   3,   5,   6,   7,   7,   8,   8,   9,   9,   9,   8,   9,   8,   9,  10,   9,   8,   7,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   7,   8,   8,   8,   9,  10,  10,  10,  10,  11,  11,  11,  12,  12,  12,  13,  13,  14,  14,  15,  16,  15,  14,  15,  15,  15,  14,  14,  15,  15,  15,  15,  15,  16,  16,  16,  16,  17,  17,  18,  19,  22,  23,  23,  23,  24,  25,  25,  25,  25,  25,  24,  25,  26,  26,  27,  29,  30,  32,  35,  36,  37,  38,  38,  36,  34,  34,  34,  32,  31,  30,  30,  30,  29,  28,  27,  27,  25,  24,  23,  21,  20,  19,  18,  17,  17,  17,  18,  17,  16,  15,  15,  14,  13,  13,  12,  10,  10,  11,   9,   9,  10,   9,   7,   6,   4,   2,   1,  -2,  -3,  -5,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -18, -18, -18, -19, -22, -24, -25, -26, -26, -27, -28, -29, -29, -29, -30, -31, -34, -35, -36, -37, -37, -37, -37, -37, -39, -41, -41, -41, -41, -41, -43, -44, -45, -46, -48, -49, -50, -51, -52, -52, -52, -53, -53, -52, -51, -51, -51, -51, -53, -53, -54, -55, -55, -55, -55, -55, -55, -55, -55, -56, -56, -57, -57, -57, -58, -58, -59, -59, -59, -58,
-  /* -67.0 */ -58, -58, -59, -58, -58, -57, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -54, -54, -54, -54, -54, -53, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -49, -49, -48, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -42, -41, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -29, -29, -28, -28, -27, -27, -27, -26, -26, -25, -25, -24, -23, -22, -21, -21, -20, -19, -18, -17, -16, -16, -14, -13, -13, -12, -11, -10, -10,  -9,  -7,  -6,  -5,  -4,  -2,  -1,   2,   4,   5,   6,   8,   9,   9,   9,  10,  11,  12,  12,  11,  11,  11,  12,  12,  13,  12,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   9,   9,  10,  10,  11,  11,  11,  11,  12,  13,  13,  13,  14,  15,  15,  15,  16,  16,  16,  16,  16,  16,  15,  16,  16,  16,  16,  16,  15,  15,  16,  16,  17,  17,  18,  18,  18,  18,  20,  22,  22,  22,  23,  23,  23,  24,  25,  26,  26,  26,  26,  27,  29,  31,  32,  33,  34,  36,  39,  41,  41,  39,  35,  33,  32,  31,  30,  30,  29,  28,  27,  26,  26,  24,  23,  24,  25,  25,  24,  22,  20,  19,  18,  18,  18,  17,  16,  16,  16,  15,  14,  14,  12,  10,  10,  10,   9,   8,   8,   6,   4,   3,   1,  -1,  -1,  -2,  -3,  -3,  -6,  -8,  -9, -11, -12, -13, -15, -17, -18, -18, -18, -17, -18, -22, -25, -26, -27, -28, -28, -28, -29, -29, -30, -31, -32, -34, -36, -37, -37, -36, -37, -38, -39, -40, -40, -40, -40, -40, -41, -42, -43, -44, -45, -47, -48, -49, -49, -49, -49, -49, -49, -49, -49, -48, -49, -50, -50, -50, -51, -51, -51, -50, -50, -51, -52, -53, -53, -53, -54, -54, -55, -56, -56, -56, -57, -57, -57, -58, -58,
-  /* -66.0 */ -55, -54, -53, -53, -54, -54, -54, -54, -54, -53, -53, -53, -53, -52, -52, -52, -52, -52, -52, -52, -52, -51, -51, -50, -50, -50, -50, -50, -49, -49, -48, -48, -47, -47, -46, -45, -45, -45, -44, -43, -43, -43, -43, -43, -42, -42, -42, -41, -41, -40, -39, -38, -38, -37, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -19, -17, -16, -16, -15, -14, -13, -12, -12, -11, -10,  -8,  -7,  -7,  -5,  -4,  -3,  -2,  -0,   1,   2,   5,   7,   9,  10,  11,  12,  13,  14,  15,  16,  15,  15,  14,  14,  15,  16,  16,  14,  13,  13,  12,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  10,  10,  10,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   8,   7,   7,   7,   7,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,  10,  10,  11,  11,  12,  13,  14,  15,  15,  15,  15,  15,  15,  16,  16,  17,  17,  18,  19,  18,  18,  18,  17,  17,  17,  18,  18,  18,  17,  17,  18,  18,  18,  19,  19,  20,  19,  19,  22,  23,  23,  23,  23,  23,  24,  24,  25,  25,  26,  27,  27,  28,  29,  30,  30,  31,  33,  34,  35,  37,  36,  34,  32,  31,  30,  28,  27,  26,  25,  25,  25,  25,  24,  24,  24,  23,  22,  21,  20,  20,  19,  18,  17,  15,  15,  15,  16,  16,  15,  14,  13,  12,  12,  10,   9,   8,   7,   5,   3,   1,   0,  -0,  -1,  -3,  -2,  -1,  -2,  -3,  -6,  -8, -10, -12, -14, -14, -15, -15, -16, -18, -19, -21, -22, -23, -24, -25, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -36, -37, -37, -38, -39, -39, -40, -41, -42, -42, -42, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -46, -47, -49, -48, -47, -47, -47, -47, -47, -48, -48, -48, -48, -49, -49, -49, -50, -51, -52, -52, -52, -53, -54, -54, -55, -55, -55, -55, -55, -55,
-  /* -65.0 */ -52, -51, -51, -52, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -28, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -20, -20, -18, -17, -17, -16, -15, -15, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -1,   0,   1,   2,   4,   5,   6,   8,  11,  13,  14,  15,  15,  16,  18,  18,  18,  18,  18,  18,  19,  19,  16,  15,  15,  14,  13,  13,  14,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  12,  13,  12,  12,  12,  11,  11,  11,  10,  10,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  11,  11,  11,  12,  12,  14,  15,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  19,  19,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  20,  20,  20,  21,  21,  21,  20,  21,  23,  24,  24,  25,  26,  26,  26,  27,  28,  28,  28,  28,  29,  30,  30,  31,  30,  30,  30,  31,  31,  30,  30,  30,  29,  29,  28,  27,  27,  27,  27,  27,  26,  25,  25,  25,  24,  23,  22,  21,  20,  20,  20,  19,  18,  18,  16,  15,  14,  14,  14,  13,  12,  11,  10,   8,   7,   6,   5,   4,   4,   3,   3,   1,   0,  -1,  -1,  -2,  -4,  -7,  -8,  -9, -11, -12, -13, -15, -17, -18, -19, -19, -20, -20, -21, -22, -25, -27, -29, -31, -32, -32, -32, -33, -33, -34, -35, -35, -35, -36, -36, -37, -38, -39, -41, -42, -43, -44, -44, -44, -44, -45, -45, -45, -45, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -45, -46, -46, -47, -47, -48, -49, -49, -50, -51, -51, -52, -52, -52, -52, -52, -52, -52, -52,
-  /* -64.0 */ -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -48, -47, -47, -47, -47, -47, -46, -46, -45, -45, -45, -45, -45, -44, -43, -43, -43, -43, -42, -42, -42, -42, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -22, -21, -21, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10,  -9,  -8,  -6,  -5,  -4,  -3,  -1,   0,   1,   2,   3,   4,   6,   7,   8,  10,  11,  14,  16,  17,  18,  18,  19,  21,  21,  21,  21,  22,  22,  20,  18,  17,  15,  15,  16,  16,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  14,  14,  13,  13,  12,  12,  12,  12,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  12,  13,  13,  14,  16,  17,  17,  17,  17,  18,  18,  18,  18,  19,  19,  20,  20,  20,  21,  21,  20,  20,  20,  20,  21,  21,  21,  21,  21,  22,  22,  22,  23,  23,  23,  23,  24,  25,  26,  27,  27,  28,  28,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  30,  30,  29,  29,  28,  28,  27,  27,  27,  26,  26,  26,  25,  24,  23,  23,  22,  22,  22,  21,  20,  19,  18,  16,  15,  15,  14,  13,  12,  11,  10,   8,   7,   5,   4,   3,   3,   2,   2,   0,   0,  -0,  -2,  -4,  -8,  -9, -10, -11, -12, -13, -16, -18, -19, -20, -21, -22, -22, -22, -23, -25, -27, -28, -30, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -44, -44, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -43, -44, -45, -45, -46, -47, -47, -48, -48, -48, -48, -49, -50, -50, -50, -51, -51, -51,
-  /* -63.0 */ -50, -50, -49, -49, -49, -49, -48, -48, -47, -47, -47, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -38, -38, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, -33, -33, -33, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10, -10,  -8,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   3,   4,   5,   6,   8,   9,  10,  12,  13,  14,  15,  15,  17,  19,  21,  22,  23,  24,  24,  23,  22,  22,  21,  20,  20,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  15,  15,  14,  14,  14,  13,  13,  13,  12,  12,  12,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  13,  14,  14,  14,  15,  16,  17,  17,  18,  18,  19,  20,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  24,  24,  24,  25,  24,  25,  26,  27,  27,  28,  29,  29,  30,  30,  31,  31,  30,  30,  31,  31,  30,  29,  29,  29,  29,  29,  29,  30,  30,  30,  31,  30,  30,  30,  29,  29,  29,  28,  27,  27,  26,  26,  26,  25,  25,  24,  24,  24,  23,  22,  21,  20,  18,  18,  18,  17,  16,  14,  13,  12,  10,   8,   7,   6,   4,   3,   2,   0,  -1,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -12, -13, -13, -15, -16, -18, -20, -21, -22, -23, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -38, -38, -37, -38, -38, -37, -38, -38, -39, -40, -40, -41, -42, -42, -43, -43, -44, -44, -45, -46, -47, -49, -49, -50, -50, -50, -50, -50, -50,
-  /* -62.0 */ -49, -49, -49, -48, -48, -48, -47, -47, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -28, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -21, -20, -19, -19, -18, -17, -16, -16, -15, -15, -14, -13, -12, -12, -11, -10, -10,  -9,  -8,  -7,  -6,  -5,  -3,  -2,  -1,   1,   2,   3,   4,   6,   7,   8,  10,  12,  13,  14,  15,  15,  14,  14,  15,  18,  21,  22,  22,  22,  23,  23,  22,  21,  20,  20,  20,  20,  21,  22,  23,  22,  22,  21,  19,  19,  19,  20,  20,  20,  20,  19,  20,  19,  20,  19,  19,  19,  19,  18,  18,  18,  17,  16,  16,  16,  15,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  15,  16,  17,  18,  19,  20,  20,  21,  22,  23,  23,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  25,  25,  25,  26,  26,  26,  26,  27,  27,  28,  29,  30,  30,  31,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  30,  30,  31,  31,  31,  31,  31,  31,  31,  30,  30,  30,  29,  28,  28,  28,  28,  27,  27,  26,  26,  25,  25,  24,  23,  22,  22,  22,  21,  21,  20,  19,  17,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -0,  -1,  -2,  -3,  -5,  -6,  -7,  -8,  -9,  -9, -10, -11, -13, -14, -15, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -38, -38, -38, -39, -39, -38, -37, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -34, -35, -35, -35, -35, -35, -36, -37, -37, -38, -39, -39, -40, -41, -42, -43, -45, -47, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49,
-  /* -61.0 */ -48, -47, -47, -47, -47, -46, -46, -45, -45, -45, -44, -43, -43, -43, -42, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -32, -32, -32, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -29, -28, -27, -27, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -23, -22, -22, -21, -21, -21, -20, -20, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -12, -12, -11, -10,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -0,   1,   2,   3,   5,   7,   8,   9,  11,  12,  14,  15,  17,  17,  18,  18,  18,  17,  16,  15,  16,  21,  23,  24,  24,  22,  21,  21,  21,  21,  23,  25,  26,  26,  24,  21,  18,  20,  20,  21,  22,  21,  22,  22,  22,  22,  22,  22,  22,  21,  19,  17,  17,  17,  16,  17,  18,  18,  18,  17,  17,  16,  16,  16,  16,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  25,  26,  26,  26,  27,  28,  28,  28,  28,  28,  29,  29,  30,  31,  31,  32,  32,  33,  33,  33,  33,  33,  33,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  32,  32,  32,  31,  31,  31,  30,  30,  30,  30,  29,  29,  28,  28,  27,  27,  26,  26,  25,  25,  24,  24,  23,  23,  22,  21,  19,  17,  14,  12,  11,   9,   8,   6,   5,   3,   2,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -8,  -9, -10, -11, -13, -14, -15, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -32, -31, -32, -32, -33, -33, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -43, -45, -45, -46, -46, -47, -47, -48, -48, -48, -48, -48, -48, -48,
-  /* -60.0 */ -46, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -34, -33, -33, -33, -32, -32, -32, -32, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -18, -18, -17, -16, -16, -15, -14, -14, -14, -13, -12, -12, -11, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -4,  -2,  -1,   0,   1,   2,   4,   6,   7,   8,   9,  12,  13,  15,  16,  17,  17,  18,  18,  19,  20,  21,  21,  20,  20,  20,  21,  21,  21,  20,  20,  19,  18,  19,  17,  16,  16,  18,  20,  21,  22,  21,  20,  21,  22,  23,  23,  23,  24,  24,  24,  23,  22,  18,  13,  10,  13,  18,  20,  20,  21,  21,  21,  21,  20,  19,  18,  18,  18,  17,  17,  16,  16,  16,  16,  15,  15,  15,  16,  15,  15,  16,  16,  16,  16,  17,  17,  17,  18,  19,  20,  21,  22,  23,  23,  24,  24,  25,  25,  25,  25,  26,  26,  26,  26,  27,  28,  28,  29,  29,  29,  29,  29,  30,  31,  32,  32,  32,  33,  33,  34,  34,  34,  35,  34,  34,  34,  34,  33,  33,  33,  33,  33,  33,  33,  33,  32,  32,  33,  33,  33,  32,  32,  31,  31,  31,  31,  31,  31,  30,  29,  29,  28,  27,  27,  27,  28,  27,  26,  26,  25,  25,  24,  22,  21,  17,  14,  12,  11,  10,   9,   8,   7,   5,   4,   3,   2,   0,  -1,  -2,  -3,  -4,  -5,  -7,  -7,  -8,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -30, -29, -29, -30, -31, -31, -31, -31, -31, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -44, -45, -46, -46, -46, -47, -47, -47, -47, -46, -46,
-  /* -59.0 */ -45, -44, -44, -44, -44, -43, -43, -43, -42, -42, -41, -41, -41, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -25, -25, -24, -24, -23, -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -21, -20, -20, -19, -20, -19, -18, -17, -17, -16, -16, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10,  -9,  -9,  -8,  -7,  -6,  -6,  -5,  -4,  -3,  -2,  -2,  -1,   1,   2,   3,   4,   6,   7,   9,  11,  12,  13,  15,  16,  17,  17,  18,  19,  20,  19,  19,  20,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  21,  20,  20,  19,  20,  20,  21,  20,  21,  21,  22,  22,  23,  23,  24,  24,  24,  23,  22,  20,  15,   9,  15,  18,  20,  21,  21,  21,  21,  21,  21,  21,  20,  20,  20,  20,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  18,  18,  18,  19,  19,  20,  21,  22,  22,  23,  24,  24,  25,  25,  26,  26,  26,  27,  28,  28,  28,  29,  29,  30,  30,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  36,  36,  36,  36,  36,  36,  36,  35,  35,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  33,  33,  33,  32,  31,  32,  32,  32,  32,  31,  30,  30,  29,  29,  30,  30,  30,  29,  29,  27,  26,  25,  24,  23,  19,  16,  14,  13,  12,  12,  10,   9,   8,   7,   6,   5,   3,   2,   0,  -1,  -2,  -3,  -4,  -6,  -7,  -8,  -8,  -9, -11, -12, -13, -14, -15, -16, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -28, -29, -29, -29, -30, -34, -34, -33, -34, -36, -37, -38, -39, -40, -41, -41, -42, -43, -44, -44, -45, -45, -45, -45, -45, -45, -45, -45,
-  /* -58.0 */ -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -39, -38, -38, -37, -37, -36, -35, -34, -34, -33, -33, -32, -31, -31, -30, -30, -29, -29, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -19, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -14, -13, -13, -12, -11, -11, -11, -10,  -9,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -4,  -3,  -2,  -1,  -0,   1,   1,   3,   4,   5,   7,   8,  10,  11,  13,  13,  15,  15,  16,  16,  17,  18,  19,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  20,  20,  20,  20,  20,  20,  19,  19,  20,  20,  20,  20,  21,  21,  22,  22,  23,  24,  24,  24,  23,  22,  20,  15,  10,  15,  18,  20,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  20,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  20,  21,  22,  23,  23,  24,  25,  26,  26,  27,  28,  27,  28,  28,  29,  29,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  36,  37,  37,  37,  37,  37,  37,  38,  38,  37,  37,  37,  36,  36,  35,  35,  35,  35,  35,  35,  35,  34,  34,  34,  34,  34,  33,  32,  31,  32,  31,  31,  30,  30,  30,  30,  30,  30,  30,  29,  28,  28,  26,  25,  23,  21,  18,  16,  15,  15,  14,  13,  12,  10,   9,   8,   7,   6,   4,   3,   1,  -0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -26, -27, -27, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -28, -28, -32, -32, -28, -31, -32, -34, -35, -36, -37, -38, -39, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43,
-  /* -57.0 */ -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -31, -31, -30, -30, -29, -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -25, -25, -25, -24, -23, -23, -22, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -18, -18, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -15, -15, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   6,   6,   7,   8,   8,   9,  12,  14,  13,  14,  15,  16,  17,  18,  19,  20,  20,  20,  20,  19,  18,  19,  19,  18,  18,  18,  19,  19,  18,  19,  18,  18,  18,  19,  19,  20,  20,  20,  21,  21,  21,  22,  23,  23,  23,  23,  22,  20,  16,   8,   9,  16,  19,  20,  20,  20,  20,  20,  21,  21,  21,  21,  22,  22,  23,  23,  24,  24,  24,  25,  24,  23,  23,  23,  23,  22,  22,  22,  22,  21,  20,  20,  19,  20,  20,  20,  20,  21,  22,  23,  25,  25,  26,  27,  28,  28,  29,  29,  29,  29,  30,  30,  31,  32,  32,  33,  34,  34,  35,  36,  36,  37,  38,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  38,  38,  37,  37,  36,  36,  36,  36,  36,  36,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  35,  34,  34,  34,  32,  31,  31,  30,  29,  29,  28,  26,  23,  20,  19,  18,  17,  16,  16,  15,  13,  12,  11,  10,   9,   8,   6,   5,   4,   2,   1,  -1,  -2,  -3,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -25, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -26, -26, -30, -30, -27, -30, -29, -31, -33, -34, -35, -36, -36, -37, -38, -38, -39, -39, -40, -40, -40, -40, -40, -40, -40, -40,
-  /* -56.0 */ -37, -37, -38, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -31, -30, -30, -30, -29, -28, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -18, -19, -18, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -15, -14, -14, -14, -15, -14, -14, -14, -14, -14, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -2,  -1,   1,   2,   3,   4,   5,   5,   5,   5,   4,   6,  11,  14,  15,  16,  14,  13,  14,  15,  16,  17,  18,  18,  19,  18,  17,  18,  18,  17,  17,  17,  18,  18,  18,  18,  17,  17,  17,  17,  17,  18,  18,  19,  19,  19,  19,  20,  21,  21,  21,  21,  21,  21,  21,  17,   5,   5,  15,  19,  20,  20,  21,  20,  20,  20,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  26,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  23,  22,  22,  22,  22,  22,  22,  23,  24,  25,  26,  27,  28,  29,  29,  30,  31,  31,  31,  31,  32,  31,  32,  33,  34,  35,  35,  36,  37,  37,  38,  39,  40,  41,  41,  41,  42,  41,  41,  41,  41,  41,  41,  40,  40,  39,  39,  39,  38,  38,  37,  37,  37,  36,  36,  35,  35,  35,  35,  36,  36,  35,  34,  34,  33,  33,  33,  33,  32,  31,  31,  30,  29,  27,  24,  22,  20,  19,  19,  18,  17,  16,  15,  14,  13,  12,  10,   9,   8,   7,   5,   4,   3,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -24, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -26, -27, -28, -28, -29, -31, -32, -32, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37,
-  /* -55.0 */ -34, -35, -35, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -27, -27, -26, -26, -25, -25, -24, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -16, -15, -15, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10,  -8,  -7,  -6,  -5,  -5,  -5,  -4,  -3,  -3,  -2,  -1,   1,   2,   3,   4,   5,   5,   3,   3,   7,  10,  11,  13,  14,  14,  14,  14,  12,  11,  12,  13,  15,  17,  17,  18,  18,  17,  15,  14,  14,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  17,  16,  17,  19,  21,  23,  21,  17,  11,  12,  10,   8,   7,   4,   3,   8,  15,  18,  20,  21,  20,  20,  21,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  25,  25,  24,  24,  24,  25,  26,  27,  28,  29,  30,  31,  32,  32,  33,  33,  33,  34,  33,  33,  34,  34,  35,  35,  36,  37,  38,  39,  40,  41,  43,  44,  44,  45,  45,  44,  44,  44,  44,  44,  43,  42,  41,  41,  41,  41,  40,  39,  39,  38,  38,  37,  37,  36,  36,  35,  35,  35,  35,  34,  35,  35,  35,  35,  34,  34,  34,  33,  33,  32,  30,  28,  25,  23,  21,  20,  19,  19,  18,  17,  15,  14,  13,  12,  10,   9,   8,   7,   5,   4,   2,   2,   0,  -1,  -2,  -3,  -5,  -6,  -7,  -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -22, -23, -26, -26, -27, -27, -28, -27, -26, -25, -26, -28, -30, -32, -33, -34, -34, -33, -33, -33, -34, -34, -34,
-  /* -54.0 */ -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -18, -19, -19, -18, -18, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -11, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -1,   0,   2,   3,   4,   5,   5,   4,   4,   9,  12,  10,   9,  10,  12,  12,  12,  12,  11,  10,   9,  10,  11,  10,  10,  10,   9,   7,   7,   9,  12,  13,  12,  11,  11,  12,  14,  14,  14,  13,  14,  16,  16,  15,  17,  18,  18,  17,  12,  12,  13,  13,  13,  14,  14,  13,  14,  15,  17,  19,  21,  21,  21,  21,  21,  22,  22,  22,  23,  23,  23,  24,  25,  25,  25,  26,  26,  27,  27,  27,  28,  28,  28,  27,  27,  27,  27,  28,  28,  27,  27,  26,  26,  27,  27,  28,  28,  28,  29,  29,  31,  31,  32,  33,  34,  35,  36,  36,  36,  37,  34,  35,  36,  36,  36,  37,  38,  39,  40,  41,  43,  44,  45,  47,  47,  47,  47,  46,  45,  45,  44,  45,  43,  43,  44,  45,  43,  41,  41,  40,  39,  38,  38,  38,  37,  36,  36,  35,  34,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  33,  31,  27,  24,  23,  24,  22,  20,  20,  18,  17,  16,  14,  13,  12,  11,   9,   8,   7,   6,   4,   3,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -24, -25, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -21, -21, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -19, -23, -22, -23, -23, -24, -22, -22, -22, -22, -23, -24, -24, -26, -28, -29, -30, -30, -31, -31, -31, -31,
-  /* -53.0 */ -28, -28, -29, -28, -29, -29, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -23, -23, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -19, -18, -18, -18, -18, -18, -19, -20, -20, -20, -19, -18, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   5,   5,   9,  11,  10,  10,   9,   9,  11,  12,  12,  12,  13,  13,  12,  12,  11,  11,  11,  10,  10,   8,   6,   5,   5,   6,   7,   6,   4,   6,   8,   6,   4,   4,   6,   6,   4,   3,   3,   5,  10,  11,  12,  13,  15,  15,  16,  16,  16,  16,  16,  16,  17,  19,  19,  20,  20,  21,  21,  22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  27,  27,  28,  28,  28,  28,  27,  27,  27,  27,  27,  27,  26,  26,  26,  27,  27,  27,  28,  29,  30,  31,  32,  32,  33,  34,  35,  35,  36,  36,  37,  38,  38,  38,  37,  36,  37,  37,  37,  38,  39,  40,  41,  42,  44,  45,  46,  47,  48,  48,  48,  51,  50,  47,  46,  47,  45,  44,  45,  43,  43,  42,  41,  41,  41,  39,  38,  37,  37,  36,  35,  35,  35,  35,  35,  35,  34,  34,  35,  37,  40,  39,  37,  35,  34,  32,  30,  28,  26,  24,  23,  22,  20,  19,  17,  16,  15,  13,  12,  11,   9,   8,   7,   5,   4,   3,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -17, -19, -19, -20, -21, -20, -19, -19, -19, -18, -18, -19, -20, -21, -23, -26, -27, -27, -28, -28, -28,
-  /* -52.0 */ -25, -25, -25, -26, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -23, -23, -23, -23, -22, -22, -21, -21, -21, -22, -22, -21, -20, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -19, -20, -19, -19, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -5,  -5,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   5,   5,   7,  13,  13,  13,  11,  10,   9,  10,  10,  10,  11,  12,  13,  14,  14,  14,  12,  12,  12,  12,  11,  10,   9,   8,   7,   6,   6,   6,   5,   4,   4,   5,   5,   5,   5,   5,   6,   7,   8,  10,  11,  10,  13,  15,  15,  15,  16,  15,  15,  15,  18,  17,  18,  19,  19,  20,  20,  21,  22,  22,  23,  24,  24,  25,  25,  26,  26,  27,  27,  27,  28,  28,  28,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  27,  29,  30,  31,  31,  33,  33,  34,  35,  35,  36,  36,  36,  36,  37,  37,  37,  38,  37,  36,  39,  39,  38,  39,  40,  41,  43,  44,  45,  46,  47,  49,  49,  47,  47,  47,  47,  47,  46,  45,  44,  44,  43,  43,  43,  42,  42,  41,  40,  39,  38,  37,  37,  36,  36,  36,  35,  35,  35,  34,  35,  37,  38,  38,  38,  37,  36,  33,  30,  29,  28,  27,  25,  23,  22,  21,  19,  18,  16,  15,  14,  12,  11,   9,   8,   6,   5,   4,   2,   1,  -1,  -2,  -3,  -5,  -6,  -7,  -8, -10, -11, -12, -13, -14, -16, -17, -18, -19, -19, -20, -21, -21, -22, -22, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -15, -16, -17, -17, -18, -18, -15, -16, -16, -15, -16, -16, -17, -17, -19, -21, -23, -24, -24, -24, -25,
-  /* -51.0 */ -21, -21, -21, -21, -22, -23, -23, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -18, -18, -17, -17, -18, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -2,  -1,  -0,   1,   2,   2,   3,   5,   5,   5,   5,   9,  14,  15,  15,  13,  11,  10,  10,  10,  10,  11,  12,  13,  13,  12,  12,  13,  13,  13,  12,  11,  10,  10,   9,   7,   6,   6,   6,   6,   5,   6,   6,   8,   9,   8,   7,   6,   6,   7,   7,   8,   8,  10,  10,  11,  12,  12,  13,  13,  15,  16,  17,  17,  18,  19,  20,  20,  21,  22,  23,  23,  24,  25,  25,  26,  26,  26,  27,  27,  28,  28,  27,  27,  27,  27,  27,  26,  26,  25,  25,  25,  25,  25,  25,  26,  26,  27,  27,  27,  29,  31,  31,  32,  32,  33,  34,  34,  34,  35,  35,  36,  36,  37,  37,  38,  36,  38,  40,  40,  39,  40,  41,  42,  43,  44,  46,  46,  46,  47,  46,  47,  46,  46,  46,  45,  45,  44,  44,  44,  44,  43,  43,  41,  41,  40,  39,  38,  38,  37,  37,  36,  36,  37,  37,  36,  35,  38,  39,  38,  38,  37,  36,  33,  31,  30,  29,  28,  27,  25,  24,  22,  20,  19,  18,  16,  15,  13,  12,  11,   9,   8,   6,   5,   3,   2,   0,  -1,  -3,  -4,  -5,  -7,  -8,  -9, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -19, -18, -18, -18, -17, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -14, -12, -12, -14, -14, -11, -12, -12, -12, -13, -13, -14, -14, -15, -16, -18, -20, -20, -21, -21,
-  /* -50.0 */ -17, -17, -17, -15, -17, -19, -20, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -16, -16, -17, -17, -16, -17, -18, -18, -18, -17, -17, -17, -18, -18, -18, -18, -17, -17, -17, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -1,  -0,   0,   1,   2,   3,   4,   5,   6,   5,   6,  10,  13,  16,  16,  14,  13,  11,  10,  10,  11,  11,  11,  12,  13,  13,  13,  12,  12,  11,  11,   9,   8,   6,   4,   3,   3,   2,   2,   2,   2,   2,   3,   5,   6,   6,   6,   3,   3,   3,   4,   5,   6,   7,   8,   9,  10,  11,  11,  12,  14,  15,  16,  17,  18,  19,  20,  20,  21,  22,  23,  23,  25,  25,  26,  26,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  25,  25,  25,  25,  24,  25,  25,  24,  25,  24,  25,  25,  26,  26,  27,  28,  30,  31,  31,  32,  33,  33,  34,  34,  35,  35,  35,  36,  37,  37,  38,  38,  40,  40,  40,  41,  41,  42,  43,  43,  44,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  44,  44,  44,  43,  43,  42,  41,  40,  39,  38,  37,  37,  36,  39,  40,  39,  37,  39,  41,  40,  37,  37,  36,  35,  33,  32,  31,  30,  29,  27,  26,  24,  23,  22,  20,  19,  17,  16,  14,  13,  11,  10,   9,   7,   6,   4,   2,   1,  -1,  -2,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, -20, -20, -19, -19, -18, -18, -19, -18, -18, -17, -17, -17, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -13, -11, -10, -12, -10,  -9, -10, -10, -10, -10, -10, -10, -11, -12, -13, -13, -14, -15, -17,
-  /* -49.0 */ -10, -12, -14, -15, -16, -16, -16, -16, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -17, -16, -16, -15, -15, -15, -15, -15, -15, -16, -16, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -1,  -1,   0,   1,   2,   3,   3,   4,   5,   6,   6,   6,  10,  15,  16,  17,  16,  15,  13,  12,  12,  11,  11,  11,  11,  12,  11,  11,  11,  10,  10,   9,   7,   6,   3,   1,  -0,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   1,   1,   2,   3,   3,   4,   4,   6,   6,   7,   8,   9,  12,  13,  14,  15,  16,  17,  19,  20,  21,  21,  23,  23,  24,  25,  26,  27,  27,  27,  28,  27,  27,  26,  26,  25,  25,  25,  24,  24,  24,  24,  23,  24,  24,  25,  24,  24,  25,  23,  25,  26,  27,  28,  28,  29,  30,  30,  31,  32,  33,  33,  33,  34,  34,  34,  35,  35,  37,  38,  39,  40,  42,  42,  42,  42,  43,  43,  42,  43,  44,  44,  45,  44,  44,  44,  45,  45,  45,  45,  45,  45,  45,  44,  44,  43,  42,  41,  41,  40,  39,  38,  38,  38,  37,  37,  38,  39,  41,  41,  40,  38,  36,  34,  33,  32,  31,  30,  29,  28,  26,  25,  24,  22,  21,  20,  18,  17,  15,  14,  12,  11,   9,   8,   6,   5,   3,   2,   0,  -2,  -3,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -17, -18, -19, -19, -20, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -18, -17, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -14, -15, -16, -16, -16, -16, -16, -15, -15, -14, -12, -12, -11, -10, -11,  -8,  -9,  -6,  -7,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -8,  -9,  -9,  -9, -10,
-  /* -48.0 */  -5,  -8, -11, -12, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -14, -13, -14, -14, -14, -14, -14, -15, -15, -16, -16, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -15, -14, -14, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -2,  -2,  -1,  -1,  -0,   1,   2,   2,   3,   4,   5,   6,   7,   7,   7,  11,  15,  16,  17,  18,  16,  15,  14,  12,  11,  11,  11,  11,  11,  11,  11,  10,   8,   7,   5,   4,   2,   1,  -0,  -1,  -2,  -2,  -2,  -3,  -3,  -3,  -2,  -1,  -1,  -1,  -1,  -0,  -0,   0,   1,   2,   2,   3,   4,   6,   7,   8,  10,  11,  13,  14,  15,  16,  18,  19,  20,  21,  22,  23,  24,  25,  26,  26,  27,  28,  28,  28,  27,  27,  26,  25,  25,  24,  24,  24,  24,  23,  23,  23,  22,  23,  23,  24,  24,  26,  25,  26,  26,  26,  27,  28,  29,  30,  30,  31,  32,  32,  32,  32,  33,  33,  33,  34,  34,  35,  37,  39,  40,  41,  44,  44,  44,  43,  43,  43,  43,  44,  44,  44,  43,  44,  44,  45,  45,  45,  45,  45,  45,  45,  44,  44,  43,  43,  42,  41,  40,  38,  38,  37,  36,  36,  36,  39,  39,  40,  40,  39,  37,  35,  33,  32,  31,  30,  29,  28,  27,  25,  24,  23,  22,  20,  19,  17,  16,  15,  13,  11,  10,   8,   7,   5,   4,   2,   1,  -1,  -3,  -4,  -6,  -7,  -9, -10, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -18, -18, -17, -18, -17, -17, -17, -16, -16, -16, -15, -14, -14, -14, -15, -15, -15, -15, -15, -15, -14, -14, -13, -11, -10,  -9,  -8, -11, -10,  -6,  -3,  -4,  -5,  -5,  -6,  -5,  -5,  -5,  -5,  -6,  -5,  -5,  -4,  -5,
-  /* -47.0 */  -5,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -14, -14, -15, -15, -15, -16, -16, -17, -17, -17, -16, -16, -16, -16, -16, -15, -15, -14, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,  -0,   0,   1,   1,   2,   3,   4,   5,   6,   7,   8,   9,   9,  10,  13,  18,  20,  20,  17,  16,  14,  13,  12,  12,  12,  11,  12,  11,  11,   9,   7,   6,   4,   2,   0,  -1,  -1,  -2,  -3,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,   0,   2,   3,   4,   6,   7,   9,  11,  12,  14,  15,  16,  17,  19,  20,  21,  23,  23,  25,  26,  26,  27,  28,  27,  27,  27,  27,  27,  25,  25,  24,  24,  24,  23,  23,  23,  22,  22,  22,  22,  23,  24,  25,  26,  25,  26,  26,  26,  27,  27,  28,  29,  30,  31,  31,  32,  32,  33,  33,  33,  33,  33,  34,  34,  35,  37,  40,  41,  43,  45,  45,  45,  44,  46,  43,  45,  44,  43,  43,  44,  45,  46,  46,  45,  45,  46,  48,  48,  45,  44,  43,  42,  41,  40,  39,  38,  37,  36,  35,  34,  34,  36,  38,  37,  36,  36,  35,  33,  32,  31,  30,  29,  28,  26,  25,  24,  23,  22,  20,  19,  18,  16,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -1,  -2,  -4,  -6,  -7,  -9, -10, -12, -13, -15, -16, -17, -19, -20, -21, -21, -22, -23, -24, -25, -25, -25, -25, -25, -26, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -18, -17, -17, -18, -17, -17, -17, -16, -16, -15, -13, -12, -13, -14, -14, -14, -14, -13, -13, -13, -12, -12, -11, -11,  -9,  -7,  -7,  -7,  -8,  -4,  -2,   1,   1,  -1,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -5,
-  /* -46.0 */  -2,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -10, -11, -10, -10, -10, -10, -10, -10, -10,  -9, -10, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -1,  -0,   0,   1,   2,   2,   4,   5,   5,   7,   8,   9,  10,  11,  11,  15,  18,  23,  23,  19,  16,  15,  14,  13,  12,  12,  12,  12,  11,  10,   9,   5,   4,   2,   0,  -0,  -1,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -3,  -4,  -4,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -1,   0,   2,   3,   5,   7,   9,  10,  12,  13,  15,  16,  17,  19,  20,  22,  23,  24,  25,  26,  27,  27,  27,  26,  27,  26,  25,  25,  25,  24,  23,  23,  23,  23,  23,  22,  22,  21,  21,  22,  22,  23,  24,  24,  25,  25,  26,  27,  27,  27,  28,  29,  30,  31,  32,  32,  33,  33,  33,  33,  33,  33,  33,  33,  34,  35,  38,  40,  42,  45,  45,  46,  46,  46,  45,  46,  45,  46,  46,  44,  46,  47,  47,  45,  47,  52,  50,  47,  44,  43,  43,  42,  41,  40,  38,  37,  35,  34,  34,  33,  33,  33,  34,  34,  33,  33,  32,  31,  30,  29,  29,  28,  27,  25,  24,  23,  22,  20,  19,  18,  17,  15,  14,  12,  11,   9,   7,   6,   4,   2,   1,  -1,  -3,  -4,  -6,  -7,  -9, -11, -12, -14, -15, -16, -18, -19, -21, -21, -22, -23, -24, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -18, -17, -18, -17, -16, -16, -16, -15, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11, -11, -10, -10,  -9,  -8,  -8,  -7,  -5,  -5,  -5,  -2,   4,   4,   5,   6,   3,   1,   1,   1,   1,   1,   0,  -0,  -1,  -2,
-  /* -45.0 */   3,   3,   3,   3,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -8,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -8,  -8,  -8,  -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -1,  -0,   0,   1,   2,   3,   4,   5,   6,   6,   7,   9,  10,  11,  11,  13,  16,  19,  19,  18,  17,  16,  15,  14,  12,  12,  12,  11,  11,  11,   9,   5,   3,   2,   0,   0,  -0,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -3,  -4,  -4,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -0,   1,   3,   5,   7,   9,  10,  12,  13,  15,  17,  18,  19,  21,  22,  23,  24,  25,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  24,  24,  23,  22,  21,  21,  21,  21,  22,  22,  22,  23,  24,  25,  26,  26,  26,  27,  27,  28,  28,  29,  30,  31,  32,  32,  33,  33,  33,  33,  33,  33,  33,  33,  33,  34,  35,  38,  39,  42,  44,  46,  46,  47,  46,  46,  46,  46,  45,  45,  46,  46,  46,  45,  44,  45,  45,  44,  43,  43,  42,  41,  40,  39,  37,  36,  34,  33,  32,  32,  32,  31,  31,  31,  31,  31,  30,  30,  29,  28,  27,  26,  25,  24,  23,  21,  20,  19,  18,  16,  15,  14,  12,  11,   9,   8,   6,   4,   3,   1,  -1,  -3,  -5,  -6,  -8,  -9, -11, -13, -14, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -19, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -12, -12, -11, -11, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -6,  -4,  -3,  -3,  -3,  -6,  -1,   4,   5,   8,   7,   6,   5,   5,   6,   5,   5,   5,   4,   3,
-  /* -44.0 */  10,  10,   9,  10,   9,   6,   3,   1,  -0,  -2,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -5,  -6,  -4,  -6,  -7,  -7,  -7,  -7,  -7,  -8,  -9,  -9, -10, -10, -11, -11, -12, -12, -12, -13, -14, -14, -14, -15, -15, -15, -15, -14, -15, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -2,  -2,  -1,  -0,   1,   2,   3,   3,   4,   5,   6,   7,   8,   9,  10,  11,  10,  12,  14,  17,  18,  18,  19,  18,  16,  15,  14,  12,  11,  11,  11,  11,  10,   6,   6,   2,   1,   1,  -0,  -1,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -5,  -5,  -6,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -0,   1,   3,   5,   7,   8,  10,  12,  13,  15,  16,  18,  19,  21,  22,  23,  24,  25,  26,  25,  26,  26,  26,  25,  25,  25,  24,  24,  23,  23,  22,  22,  23,  22,  21,  21,  21,  21,  21,  22,  23,  24,  24,  25,  26,  27,  27,  28,  28,  28,  29,  30,  30,  31,  32,  32,  33,  33,  33,  34,  34,  33,  33,  33,  34,  34,  35,  38,  40,  42,  44,  45,  46,  46,  46,  46,  44,  44,  44,  45,  44,  44,  44,  44,  44,  43,  43,  43,  42,  41,  39,  39,  37,  36,  34,  33,  32,  32,  31,  31,  30,  30,  30,  30,  29,  29,  28,  27,  26,  25,  24,  23,  22,  21,  20,  19,  18,  16,  15,  13,  12,  11,   9,   8,   6,   4,   3,   1,  -1,  -3,  -5,  -6,  -8, -10, -12, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -18, -17, -17, -16, -16, -15, -15, -13, -10,  -8,  -9, -11,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -1,  -1,   0,   1,  -0,   2,   5,   8,   9,   9,  11,  10,  11,  12,  11,  11,  10,  10,
-  /* -43.0 */  14,  13,  12,  12,  10,   9,   7,   4,   3,   2,   0,  -1,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -7,  -7,  -8,  -9,  -9, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -0,   1,   2,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  10,  12,  15,  17,  20,  20,  20,  20,  19,  16,  14,  13,  13,  12,  11,  12,  11,   9,   6,   4,   1,   1,   0,  -1,  -2,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -7,  -7,  -6,  -6,  -5,  -3,  -2,  -1,   1,   3,   5,   7,   8,  10,  11,  13,  14,  16,  18,  19,  20,  22,  23,  24,  25,  25,  25,  25,  25,  25,  24,  24,  24,  23,  23,  23,  22,  21,  22,  21,  19,  19,  20,  21,  21,  21,  22,  23,  24,  25,  25,  26,  28,  28,  28,  28,  28,  29,  29,  30,  30,  31,  32,  33,  33,  33,  34,  34,  33,  34,  34,  33,  33,  34,  35,  37,  40,  41,  43,  43,  44,  45,  45,  44,  43,  44,  44,  43,  43,  44,  44,  43,  43,  42,  42,  41,  39,  38,  37,  36,  35,  33,  32,  32,  31,  30,  30,  30,  29,  29,  28,  27,  27,  26,  25,  24,  24,  23,  22,  21,  20,  19,  18,  16,  15,  13,  12,  11,   9,   8,   6,   4,   3,   1,  -1,  -3,  -5,  -7,  -8, -11, -12, -14, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -16, -15, -15, -14,  -9,  -5,  -4,  -5,  -8,  -9,  -8,  -8,  -7,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -0,   1,   2,   3,   4,   5,   7,   8,   9,  11,  13,  12,  10,  12,  14,  14,  15,  14,  14,
-  /* -42.0 */  15,  15,  14,  13,  11,  10,   9,   7,   5,   4,   3,   2,   1,   0,   0,  -1,   0,  -0,  -2,  -2,  -2,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -7,  -7,  -8,  -9, -10, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -0,   1,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  11,  12,  16,  17,  20,  21,  22,  23,  23,  19,  16,  14,  13,  13,  12,  12,  12,  12,  10,   6,   2,   1,   0,  -1,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   3,   5,   6,   8,  10,  11,  13,  14,  16,  18,  19,  20,  22,  23,  24,  25,  25,  25,  25,  25,  24,  24,  24,  24,  23,  23,  22,  22,  21,  20,  20,  20,  24,  21,  22,  20,  20,  21,  22,  23,  24,  25,  26,  26,  27,  28,  28,  29,  29,  29,  29,  30,  30,  31,  31,  32,  34,  35,  35,  35,  34,  34,  33,  33,  33,  34,  35,  37,  38,  40,  41,  42,  43,  44,  44,  43,  44,  44,  43,  43,  43,  43,  42,  42,  40,  40,  39,  37,  36,  35,  35,  33,  32,  31,  30,  30,  29,  28,  28,  28,  28,  27,  26,  25,  24,  23,  22,  22,  21,  20,  19,  18,  17,  16,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -1,  -3,  -5,  -7,  -9, -11, -13, -14, -16, -18, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -31, -31, -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -15, -14, -12,  -6,  -2,  -1,  -2,  -5,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -2,  -1,  -1,  -0,   1,   2,   3,   4,   6,   7,   9,  11,  12,  13,  14,  15,  15,  11,   9,  10,  11,  14,  16,  15,
-  /* -41.0 */  19,  18,  17,  15,  13,  12,  10,   7,   6,   5,   4,   4,   3,   2,   2,   4,   2,   0,   0,  -1,  -1,  -1,  -1,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -8, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -0,  -0,   0,   1,   2,   3,   4,   5,   6,   8,   9,  10,  11,  11,  11,  16,  19,  21,  22,  23,  24,  23,  20,  16,  14,  14,  13,  13,  13,  13,  12,  11,   9,   5,   2,   1,  -0,  -1,  -2,  -3,  -3,  -4,  -5,  -5,  -6,  -7,  -8,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   2,   4,   6,   8,  10,  11,  13,  14,  16,  18,  19,  20,  21,  22,  23,  24,  25,  24,  24,  24,  24,  24,  23,  23,  23,  22,  22,  20,  20,  20,  19,  18,  17,  18,  18,  19,  19,  20,  21,  22,  23,  25,  26,  27,  27,  27,  29,  29,  29,  29,  29,  29,  30,  30,  30,  31,  33,  35,  36,  35,  35,  33,  33,  33,  33,  33,  33,  35,  36,  37,  38,  39,  40,  42,  43,  43,  43,  44,  43,  43,  42,  42,  41,  41,  40,  39,  37,  36,  35,  34,  32,  31,  30,  29,  29,  28,  28,  27,  27,  27,  26,  26,  25,  24,  22,  21,  20,  19,  19,  18,  18,  16,  15,  14,  13,  11,  10,   8,   7,   5,   4,   2,   0,  -2,  -4,  -5,  -7,  -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -26, -25, -23, -22, -21, -20, -18, -17, -16, -16, -15, -14, -12,  -6,  -2,  -1,  -1,  -0,  -3,  -5,  -4,  -3,  -2,  -1,  -1,   0,   1,   1,   2,   3,   4,   5,   6,   7,   8,   9,  13,  14,  15,  16,  16,  18,  16,  13,  13,  17,  16,  15,  17,  19,
-  /* -40.0 */  21,  20,  19,  17,  15,  13,  11,   9,   8,   7,   6,   6,   5,   5,   6,   3,   3,   3,   2,   1,   1,   1,   0,  -0,  -1,  -2,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   1,   2,   3,   4,   6,   7,   8,   9,  11,  11,  10,  13,  17,  22,  23,  23,  23,  21,  19,  16,  15,  14,  13,  13,  14,  14,  13,  13,  12,  10,   5,   2,   0,  -0,  -2,  -3,  -4,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   2,   4,   6,   8,  10,  11,  13,  14,  16,  17,  19,  20,  21,  22,  23,  23,  24,  24,  24,  23,  23,  23,  23,  22,  22,  22,  22,  20,  19,  18,  18,  18,  17,  18,  18,  19,  19,  20,  20,  21,  22,  24,  25,  26,  26,  27,  26,  28,  28,  29,  29,  29,  29,  29,  30,  30,  32,  34,  35,  35,  34,  33,  33,  33,  34,  34,  33,  33,  34,  34,  35,  37,  38,  40,  41,  42,  43,  43,  43,  42,  42,  41,  40,  40,  39,  38,  36,  35,  33,  32,  31,  30,  29,  28,  27,  27,  27,  26,  26,  26,  25,  24,  23,  22,  21,  20,  18,  18,  17,  17,  16,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -1,  -2,  -4,  -6,  -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -21, -20, -18, -17, -15, -15, -14, -12,  -7,  -2,  -2,  -1,  -0,   1,   0,  -2,  -2,  -1,   1,   1,   2,   3,   3,   4,   4,   5,   6,   7,   8,  10,  12,  12,  15,  18,  19,  19,  19,  20,  19,  15,  13,  16,  18,  19,  19,  21,
-  /* -39.0 */  22,  22,  21,  19,  17,  16,  13,  12,  11,  10,   9,   8,  10,   8,   6,   6,   5,   4,   3,   3,   3,   2,   1,   1,   0,  -1,  -2,  -3,  -4,  -6,  -7,  -8,  -8,  -9,  -9,  -9, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   1,   1,   2,   3,   4,   6,   7,   8,   9,  10,  11,   9,  13,  17,  20,  24,  23,  20,  18,  17,  16,  14,  14,  14,  14,  13,  12,  13,  13,  13,  11,   8,   3,   1,  -0,  -2,  -3,  -4,  -4,  -5,  -5,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   6,   8,  10,  11,  13,  14,  16,  17,  18,  19,  20,  21,  22,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  20,  20,  19,  19,  18,  17,  17,  17,  17,  18,  19,  19,  20,  20,  21,  22,  23,  24,  25,  26,  26,  28,  27,  28,  27,  28,  29,  29,  29,  30,  30,  30,  32,  34,  33,  32,  33,  32,  32,  32,  32,  32,  32,  32,  32,  33,  34,  36,  37,  39,  40,  40,  41,  41,  43,  42,  41,  40,  40,  38,  37,  35,  33,  31,  30,  29,  28,  27,  26,  26,  26,  26,  25,  25,  25,  24,  23,  22,  20,  19,  18,  17,  16,  16,  15,  15,  13,  11,   9,   8,   6,   5,   3,   2,   0,  -2,  -3,  -5,  -7,  -9, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -33, -33, -32, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -20, -18, -16, -15, -13, -10,  -6,  -3,  -1,   1,   2,   2,   3,   1,  -1,   0,   2,   3,   4,   5,   5,   6,   7,   7,   7,   8,   9,  11,  13,  16,  16,  18,  21,  22,  22,  22,  22,  24,  23,  25,  25,  20,  21,  20,  22,
-  /* -38.0 */  21,  23,  23,  22,  20,  18,  16,  14,  13,  13,  11,  12,  12,   9,   8,   7,   6,   5,   4,   4,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -8,  -8,  -9, -10, -10, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,   0,   1,   2,   3,   4,   5,   6,   8,   9,  10,  11,   9,  14,  20,  21,  24,  24,  21,  19,  18,  16,  16,  15,  16,  15,  14,  15,  15,  15,  13,  11,   9,   4,   2,   1,  -1,  -2,  -3,  -4,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   6,   8,   9,  11,  13,  14,  15,  16,  18,  19,  20,  20,  21,  22,  22,  22,  22,  22,  21,  21,  21,  21,  20,  20,  19,  19,  17,  16,  16,  16,  17,  17,  18,  19,  19,  20,  21,  22,  23,  23,  23,  24,  25,  26,  26,  27,  27,  27,  27,  27,  28,  29,  29,  29,  29,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  31,  30,  30,  31,  32,  34,  35,  36,  37,  38,  39,  39,  41,  41,  41,  41,  39,  37,  36,  34,  32,  31,  29,  27,  26,  26,  25,  25,  25,  25,  24,  24,  23,  22,  21,  20,  19,  17,  16,  15,  14,  14,  13,  14,  12,   9,   7,   6,   4,   3,   1,  -0,  -2,  -4,  -6,  -8, -10, -11, -13, -15, -17, -19, -21, -22, -24, -26, -27, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -36, -37, -36, -36, -35, -35, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -24, -22, -21, -19, -17, -15, -12,  -8,  -4,  -1,   2,   3,   4,   7,   7,   6,   7,   6,   2,   4,   5,   6,   7,   8,   9,   9,   9,  10,  11,  12,  13,  17,  18,  19,  21,  24,  25,  25,  24,  25,  26,  28,  30,  29,  26,  22,  21,  21,
-  /* -37.0 */  20,  21,  23,  23,  22,  20,  18,  17,  15,  15,  14,  13,  12,  11,  10,   8,   7,   6,   6,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -9, -10, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -12, -12, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,   0,   1,   2,   3,   5,   6,   7,   8,   9,  11,  11,   9,  12,  21,  21,  25,  25,  23,  20,  18,  17,  17,  17,  17,  16,  17,  17,  16,  15,  14,  12,  10,   8,   4,   2,  -0,  -2,  -3,  -4,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -2,  -1,   1,   2,   4,   6,   7,   9,  11,  12,  13,  15,  16,  17,  18,  19,  20,  21,  21,  21,  21,  21,  21,  20,  20,  19,  19,  19,  19,  18,  18,  18,  17,  16,  16,  17,  17,  18,  18,  19,  20,  21,  22,  23,  23,  24,  24,  25,  25,  26,  26,  26,  27,  27,  27,  29,  29,  29,  29,  28,  30,  30,  30,  29,  30,  29,  30,  30,  31,  31,  30,  29,  28,  29,  30,  31,  31,  32,  34,  36,  37,  37,  37,  38,  39,  39,  38,  36,  36,  33,  31,  30,  28,  26,  25,  25,  24,  24,  24,  24,  23,  23,  22,  21,  19,  18,  17,  16,  15,  14,  13,  12,  12,  11,  10,   8,   5,   4,   2,   0,  -1,  -3,  -5,  -7,  -8, -10, -12, -14, -16, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -38, -39, -39, -38, -38, -37, -36, -35, -35, -34, -33, -32, -30, -29, -28, -27, -26, -25, -23, -21, -18, -13,  -9,  -6,  -4,  -1,   2,   4,   5,   7,   9,  12,  14,  14,  12,   6,   7,   8,   9,  10,  12,  11,  12,  12,  13,  14,  16,  17,  19,  21,  22,  24,  25,  26,  27,  27,  28,  29,  32,  33,  33,  30,  23,  21,  20,
-  /* -36.0 */  23,  17,  22,  24,  24,  23,  21,  19,  18,  16,  16,  14,  14,  12,  11,   9,   9,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9,  -9, -10, -10, -10, -10, -11, -11, -12, -11, -11, -11, -11, -11, -12, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -1,  -0,   1,   2,   3,   5,   6,   7,   8,  10,  11,  12,  11,   9,  19,  21,  25,  27,  26,  23,  20,  19,  18,  18,  18,  18,  17,  17,  17,  17,  15,  13,  11,   9,   7,   4,   1,  -1,  -3,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   6,   7,   9,  10,  12,  13,  14,  16,  17,  18,  18,  19,  20,  20,  20,  20,  19,  19,  18,  18,  18,  18,  18,  17,  17,  17,  18,  17,  17,  17,  17,  18,  18,  19,  19,  20,  21,  22,  23,  24,  24,  25,  25,  26,  26,  26,  27,  27,  28,  29,  31,  31,  30,  28,  28,  28,  28,  28,  28,  28,  28,  28,  30,  30,  30,  29,  27,  27,  27,  27,  28,  28,  30,  32,  34,  35,  35,  34,  34,  34,  35,  34,  34,  33,  33,  31,  29,  27,  25,  24,  24,  24,  24,  24,  23,  23,  22,  20,  19,  18,  17,  15,  14,  13,  12,  11,  11,  10,   9,   8,   6,   4,   1,  -0,  -2,  -3,  -5,  -7,  -9, -11, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -31, -33, -33, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -40, -39, -38, -38, -38, -38, -39, -38, -37, -36, -36, -35, -34, -33, -31, -30, -29, -28, -26, -24, -21, -18, -11,  -7,  -5,  -3,  -1,   1,   3,   5,   6,   8,  10,  12,  16,  19,  17,  10,   9,  10,  12,  13,  14,  14,  15,  15,  16,  18,  19,  20,  22,  24,  25,  25,  27,  28,  29,  29,  31,  33,  36,  37,  36,  34,  33,  28,  23,
-  /* -35.0 */  28,  18,  20,  25,  26,  25,  23,  21,  20,  19,  17,  16,  14,  13,  12,  10,   9,   8,   6,   5,   5,   3,   2,   1,   0,  -0,  -1,  -2,  -3,  -3,  -4,  -5,  -6,  -6,  -7,  -8,  -8,  -9,  -9,  -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -0,   1,   2,   4,   5,   6,   7,   8,  10,  11,  13,  13,  10,  12,  21,  25,  30,  26,  22,  21,  20,  20,  19,  18,  18,  17,  17,  17,  16,  15,  14,  13,  10,   9,   8,   3,  -0,  -3,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   5,   7,   6,   8,   9,  11,  12,  14,  15,  16,  16,  17,  18,  18,  18,  19,  19,  18,  18,  18,  17,  17,  17,  17,  17,  17,  18,  17,  17,  17,  18,  18,  18,  19,  20,  20,  20,  21,  21,  22,  23,  24,  25,  25,  26,  26,  26,  26,  28,  30,  31,  32,  31,  30,  29,  29,  26,  27,  28,  27,  26,  26,  27,  28,  30,  30,  29,  27,  25,  25,  25,  26,  26,  27,  30,  33,  33,  33,  32,  31,  31,  31,  31,  30,  31,  30,  30,  29,  26,  25,  23,  22,  22,  22,  22,  22,  21,  20,  19,  17,  16,  15,  14,  13,  12,  11,  10,   9,   8,   7,   6,   4,   2,  -1,  -2,  -4,  -6,  -7,  -9, -11, -13, -15, -17, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -34, -37, -38, -40, -40, -40, -40, -40, -39, -38, -39, -40, -38, -35, -33, -32, -32, -34, -35, -35, -34, -33, -33, -33, -33, -33, -32, -31, -28, -25, -22, -19, -15, -11,  -7,  -4,  -2,  -0,   1,   2,   4,   6,   8,  10,  12,  14,  17,  20,  20,  17,  11,  13,  14,  15,  16,  17,  17,  17,  19,  21,  22,  24,  25,  26,  26,  27,  28,  31,  32,  32,  34,  38,  39,  38,  38,  38,  38,  37,  28,
-  /* -34.0 */  37,  24,  18,  25,  27,  27,  26,  23,  21,  20,  17,  16,  16,  14,  12,  11,   9,   8,   7,   6,   5,   4,   3,   2,   1,   0,  -0,  -2,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,   0,   1,   2,   3,   5,   7,   7,  10,  10,  11,  12,  14,  13,   8,  19,  25,  32,  24,  22,  22,  23,  22,  21,  19,  18,  17,  17,  17,  17,  16,  16,  15,  13,  10,   8,   6,   2,  -1,  -3,  -5,  -6,  -6,  -7,  -7,  -8,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   3,   3,   5,   6,   7,   9,   9,  11,  12,  13,  14,  15,  16,  16,  17,  18,  18,  18,  18,  17,  17,  16,  16,  16,  16,  16,  16,  17,  18,  17,  18,  19,  18,  20,  20,  20,  21,  21,  21,  22,  23,  23,  24,  25,  25,  26,  26,  26,  27,  29,  31,  32,  33,  33,  32,  31,  30,  28,  27,  29,  28,  26,  26,  26,  27,  29,  29,  29,  26,  23,  23,  23,  23,  24,  25,  28,  31,  33,  31,  30,  28,  28,  28,  27,  27,  27,  28,  29,  27,  25,  24,  22,  21,  20,  20,  20,  20,  19,  18,  17,  16,  15,  14,  12,  11,  10,   9,   8,   7,   6,   5,   3,   1,  -1,  -2,  -4,  -6,  -8,  -9, -11, -13, -15, -17, -19, -21, -22, -24, -26, -28, -30, -31, -32, -33, -35, -37, -38, -40, -41, -41, -40, -40, -40, -37, -36, -37, -38, -36, -33, -31, -28, -28, -30, -30, -30, -30, -29, -27, -26, -27, -28, -28, -27, -24, -22, -18, -14, -11,  -8,  -4,  -2,   1,   3,   4,   4,   6,   8,  10,  12,  14,  17,  19,  22,  24,  22,  18,  15,  17,  18,  19,  19,  20,  20,  23,  24,  26,  27,  27,  27,  28,  30,  32,  32,  33,  36,  39,  39,  39,  39,  40,  40,  41,  41,  37,
-  /* -33.0 */  43,  35,  18,  24,  28,  28,  27,  24,  23,  20,  19,  18,  16,  14,  12,  11,  10,   9,   8,   7,   6,   5,   3,   2,   1,   1,  -0,  -1,  -2,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -0,   0,   1,   3,   4,   5,   6,   6,   8,   9,  11,  12,  14,  15,  10,  15,  26,  32,  23,  21,  23,  25,  25,  23,  20,  19,  18,  17,  18,  17,  17,  16,  15,  13,  11,   8,   7,   4,  -0,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -8,  -8,  -7,  -6,  -5,  -3,  -2,  -1,   1,   2,   3,   4,   6,   7,   7,   8,   9,  11,  12,  13,  14,  14,  15,  16,  16,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  16,  17,  17,  19,  19,  19,  20,  20,  23,  21,  22,  22,  22,  23,  23,  24,  24,  25,  26,  27,  27,  27,  28,  31,  31,  33,  34,  34,  32,  31,  29,  28,  29,  29,  30,  29,  25,  25,  25,  26,  27,  29,  26,  22,  20,  21,  21,  22,  23,  26,  31,  30,  28,  26,  25,  25,  24,  24,  23,  23,  24,  25,  25,  24,  22,  21,  19,  19,  18,  18,  17,  17,  16,  15,  14,  13,  12,  11,   9,   8,   7,   6,   5,   4,   3,   1,  -1,  -3,  -5,  -7,  -8, -10, -11, -12, -15, -17, -19, -21, -23, -25, -27, -28, -30, -32, -33, -34, -35, -37, -39, -39, -40, -41, -40, -40, -41, -40, -38, -38, -39, -38, -36, -33, -30, -27, -27, -28, -28, -28, -28, -27, -26, -23, -22, -21, -21, -21, -19, -17, -15, -14, -11,  -7,  -2,   1,   3,   7,   7,   8,   8,   9,  12,  14,  17,  19,  22,  25,  27,  26,  25,  20,  19,  21,  24,  22,  24,  24,  27,  28,  29,  30,  29,  30,  30,  34,  34,  35,  36,  37,  38,  40,  40,  40,  41,  42,  42,  43,  43,
-  /* -32.0 */  44,  41,  23,  20,  28,  30,  29,  25,  24,  21,  20,  19,  17,  15,  13,  12,  11,  10,   8,   7,   6,   4,   3,   2,   1,   1,   0,  -0,  -2,  -2,  -3,  -3,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -1,  -1,  -0,   0,   1,   2,   3,   4,   5,   6,   7,   9,  10,  12,  13,  15,  16,  12,  15,  29,  32,  26,  21,  24,  25,  27,  25,  22,  20,  18,  17,  17,  17,  16,  15,  14,  13,  11,   8,   6,   5,  -1,  -3,  -4,  -5,  -6,  -8,  -8,  -7,  -8,  -7,  -7,  -6,  -5,  -2,  -1,   0,   1,   2,   3,   4,   6,   6,   7,   8,   9,  10,  11,  12,  13,  13,  14,  15,  15,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  16,  17,  18,  19,  19,  19,  20,  20,  23,  21,  23,  23,  23,  23,  24,  24,  25,  25,  27,  27,  28,  29,  31,  30,  32,  33,  35,  37,  36,  35,  34,  34,  33,  33,  31,  31,  27,  24,  23,  23,  24,  25,  24,  20,  18,  18,  19,  20,  21,  24,  26,  26,  25,  23,  23,  21,  21,  20,  20,  20,  20,  21,  22,  21,  21,  21,  19,  16,  16,  15,  15,  14,  14,  13,  12,  11,  10,   9,   8,   6,   5,   4,   3,   2,   0,  -2,  -4,  -6,  -7,  -9, -11, -13, -14, -15, -16, -19, -21, -23, -25, -26, -28, -30, -29, -31, -32, -34, -35, -36, -37, -40, -40, -41, -40, -41, -41, -40, -39, -39, -39, -38, -36, -35, -31, -27, -27, -26, -25, -26, -26, -24, -24, -22, -20, -19, -20, -19, -18, -15, -12, -12,  -9,  -4,   0,   2,   4,   9,  10,  12,  13,  12,  13,  16,  20,  22,  24,  26,  28,  30,  29,  27,  22,  23,  24,  25,  26,  28,  29,  30,  31,  32,  31,  32,  32,  36,  37,  37,  39,  40,  41,  42,  42,  42,  42,  43,  43,  44,  44,
-  /* -31.0 */  46,  45,  33,  19,  28,  31,  29,  28,  26,  23,  21,  19,  17,  16,  14,  12,  11,  10,   8,   7,   6,   4,   3,   2,   1,   1,  -0,  -1,  -1,  -2,  -2,  -3,  -3,  -5,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -0,  -0,   0,   1,   1,   1,   2,   3,   4,   5,   6,   7,   8,  10,  11,  13,  14,  16,  13,  17,  31,  33,  27,  24,  25,  25,  27,  26,  22,  20,  18,  17,  17,  16,  15,  15,  14,  13,  11,   8,   6,   4,   1,  -3,  -5,  -6,  -8,  -8,  -8,  -8,  -9,  -8,  -7,  -5,  -4,  -1,   1,   3,   3,   2,   3,   4,   5,   5,   6,   6,   7,   8,   9,  10,  11,  12,  12,  13,  14,  14,  15,  16,  16,  15,  15,  15,  15,  15,  15,  16,  17,  18,  18,  19,  20,  21,  21,  22,  24,  23,  23,  23,  24,  24,  25,  26,  26,  27,  28,  29,  29,  31,  31,  32,  33,  35,  35,  35,  35,  35,  34,  35,  36,  36,  32,  30,  25,  22,  22,  22,  22,  22,  17,  16,  16,  16,  16,  18,  20,  22,  22,  22,  21,  19,  18,  17,  17,  17,  17,  18,  18,  18,  18,  19,  18,  18,  15,  14,  13,  13,  13,  12,  11,  10,   9,   8,   7,   6,   4,   3,   2,   1,  -0,  -2,  -4,  -6,  -8, -10, -12, -13, -15, -17, -17, -18, -21, -23, -25, -27, -28, -28, -30, -32, -34, -34, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -39, -38, -37, -36, -31, -30, -26, -25, -25, -24, -24, -23, -24, -21, -20, -20, -19, -20, -18, -16, -13,  -9,  -7,  -6,  -2,   1,   4,   7,  11,  10,  14,  16,  16,  17,  18,  22,  24,  25,  27,  30,  32,  33,  31,  25,  26,  29,  28,  29,  31,  32,  33,  33,  34,  34,  34,  35,  37,  39,  40,  41,  42,  43,  45,  43,  43,  43,  44,  44,  45,  46,
-  /* -30.0 */  48,  46,  40,  26,  25,  31,  31,  30,  27,  25,  23,  21,  19,  16,  15,  14,  12,  10,   9,   7,   6,   4,   3,   2,   1,   1,  -0,  -1,  -2,  -2,  -1,  -2,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -2,  -2,  -1,   0,   0,   1,   1,   1,   2,   2,   3,   4,   5,   5,   7,   8,   9,  10,  12,  13,  15,  16,  14,  15,  33,  37,  32,  27,  25,  24,  24,  26,  23,  21,  19,  18,  17,  15,  14,  13,  11,  10,   9,   6,   4,   3,   3,   1,  -4,  -6,  -7,  -8,  -8,  -9, -10,  -9,  -7,  -6,  -4,  -1,  -0,   0,   1,   1,   3,   3,   4,   4,   5,   5,   6,   7,   8,   9,   9,  10,  11,  12,  13,  13,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  17,  17,  18,  19,  20,  21,  23,  23,  25,  22,  23,  24,  24,  25,  26,  26,  26,  27,  28,  29,  32,  31,  32,  34,  35,  34,  33,  33,  33,  33,  32,  34,  33,  36,  35,  30,  28,  24,  21,  21,  20,  20,  16,  14,  13,  14,  14,  15,  15,  18,  19,  19,  18,  16,  15,  14,  14,  14,  15,  15,  15,  14,  14,  14,  15,  15,  14,  13,  12,  11,  10,  10,   9,   8,   7,   6,   5,   4,   3,   1,   0,  -1,  -3,  -5,  -7,  -9, -11, -13, -15, -16, -18, -19, -20, -21, -23, -25, -27, -30, -31, -31, -32, -33, -35, -36, -37, -38, -38, -38, -39, -39, -39, -40, -39, -40, -40, -40, -39, -37, -36, -33, -29, -27, -24, -24, -22, -23, -22, -22, -21, -20, -18, -18, -17, -18, -17, -14, -10,  -6,  -4,  -1,   0,   3,   6,   8,  12,  13,  15,  18,  19,  21,  22,  24,  26,  28,  28,  32,  34,  36,  35,  30,  29,  29,  30,  32,  33,  33,  35,  36,  36,  36,  36,  37,  39,  42,  43,  44,  45,  45,  46,  45,  45,  45,  45,  45,  46,  48,
-  /* -29.0 */  48,  47,  46,  35,  23,  30,  31,  31,  28,  26,  23,  21,  19,  17,  15,  14,  12,  10,   9,   7,   6,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -2,  -2,  -3,  -4,  -5,  -5,  -5,  -6,  -7,  -7,  -8,  -8, -10, -11, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -0,   0,   1,   1,   2,   2,   2,   3,   3,   4,   5,   6,   7,   8,   9,  11,  12,  14,  15,  17,  16,  14,  31,  38,  35,  31,  28,  26,  26,  24,  24,  22,  20,  19,  17,  16,  14,  11,  10,   9,   8,   7,   6,   4,   2,   1,  -3,  -6,  -8,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -6,  -4,  -3,  -1,   0,   1,   2,   2,   2,   2,   3,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  12,  13,  14,  15,  14,  15,  15,  15,  15,  15,  16,  17,  18,  18,  19,  20,  21,  22,  24,  24,  23,  24,  24,  24,  25,  25,  26,  26,  27,  28,  30,  32,  31,  32,  32,  32,  31,  31,  32,  32,  31,  31,  31,  31,  34,  35,  29,  27,  25,  19,  18,  18,  18,  13,  12,  11,  11,  12,  12,  11,  13,  15,  15,  15,  15,  13,  11,  10,  10,  11,  11,  11,  10,  10,  10,  11,  11,  10,  11,  11,  10,   9,   8,   7,   6,   5,   4,   3,   2,   0,  -1,  -2,  -4,  -6,  -8, -10, -12, -14, -15, -17, -19, -20, -22, -23, -25, -27, -29, -31, -33, -33, -33, -34, -36, -37, -36, -37, -38, -39, -38, -38, -38, -39, -39, -39, -39, -40, -39, -38, -36, -34, -28, -26, -23, -23, -21, -21, -20, -20, -18, -17, -17, -16, -16, -16, -16, -15, -12,  -9,  -4,  -1,   2,   4,   5,   8,  10,  12,  14,  16,  19,  20,  23,  25,  26,  28,  30,  31,  33,  35,  37,  37,  34,  31,  33,  32,  34,  35,  35,  37,  38,  39,  38,  38,  40,  41,  46,  45,  46,  47,  47,  47,  47,  46,  47,  47,  46,  46,  48,
-  /* -28.0 */  48,  49,  48,  41,  25,  30,  35,  32,  30,  27,  24,  22,  19,  17,  15,  13,  12,  10,   9,   7,   6,   5,   4,   2,   1,   0,  -0,  -1,  -1,  -1,  -2,  -3,  -4,  -4,  -5,  -5,  -4,  -5,  -6,  -8,  -9, -11, -11, -12, -13, -13, -13, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   2,   2,   3,   3,   3,   4,   4,   5,   6,   7,   8,   9,  11,  12,  14,  15,  17,  17,  13,  26,  35,  38,  35,  29,  29,  27,  24,  24,  23,  21,  20,  18,  16,  14,  11,   9,   8,   8,   7,   6,   6,   2,   1,  -2,  -6,  -8, -10, -10, -11, -11, -11, -10,  -9,  -7,  -6,  -4,  -3,  -2,  -1,  -0,  -0,   1,   1,   2,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  12,  13,  14,  14,  14,  14,  15,  15,  15,  16,  17,  17,  18,  19,  20,  21,  22,  23,  25,  24,  24,  25,  25,  25,  25,  26,  26,  27,  28,  30,  32,  32,  32,  32,  32,  30,  31,  31,  33,  31,  30,  30,  30,  32,  32,  28,  26,  24,  19,  18,  17,  15,  12,  10,   8,   9,  10,  10,   9,   8,  12,  12,  12,  12,  11,   8,   7,   7,   7,   8,   8,   8,   7,   7,   7,   7,   8,   9,   8,   8,   7,   7,   6,   4,   3,   2,   1,  -0,  -2,  -3,  -5,  -7,  -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -28, -30, -31, -34, -35, -35, -36, -37, -38, -38, -37, -38, -39, -39, -38, -38, -38, -39, -39, -39, -39, -39, -38, -37, -34, -29, -24, -21, -20, -20, -20, -19, -18, -16, -15, -14, -14, -14, -13, -12, -12, -12, -10,  -9,  -6,   0,   4,   5,   8,   9,  11,  13,  15,  18,  20,  22,  25,  27,  29,  30,  32,  33,  35,  38,  40,  40,  38,  35,  36,  35,  36,  36,  38,  39,  41,  41,  41,  40,  42,  44,  46,  47,  47,  48,  48,  49,  49,  48,  48,  47,  47,  47,  48,
-  /* -27.0 */  48,  50,  49,  45,  29,  31,  34,  33,  31,  28,  25,  22,  19,  17,  15,  13,  12,  10,   9,   7,   7,   5,   4,   2,   2,   0,  -0,  -1,  -1,  -1,  -2,  -3,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -9, -10, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   7,   8,   9,  10,  12,  13,  14,  16,  18,  19,  13,  23,  35,  41,  41,  37,  36,  26,  25,  24,  24,  22,  21,  19,  17,  15,  11,   8,   6,   5,   7,   6,   4,   1,   0,  -3,  -7,  -8, -11, -10, -10, -11, -12,  -9,  -9,  -8,  -7,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  14,  14,  14,  15,  15,  15,  16,  17,  17,  18,  19,  20,  21,  22,  22,  24,  26,  25,  25,  25,  25,  25,  25,  25,  26,  28,  31,  32,  33,  33,  31,  32,  30,  29,  28,  29,  28,  29,  29,  29,  29,  29,  28,  24,  22,  18,  15,  14,  13,  11,   7,   6,   6,   7,   7,   7,   6,   9,  10,   9,   8,   6,   5,   4,   4,   4,   4,   5,   5,   5,   4,   4,   4,   4,   5,   6,   6,   6,   5,   3,   3,   1,   0,  -1,  -2,  -4,  -6,  -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -26, -27, -27, -29, -32, -34, -36, -37, -38, -39, -39, -40, -40, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -37, -34, -30, -26, -23, -20, -18, -18, -18, -17, -15, -14, -13, -12, -11, -10, -10,  -8,  -7,  -5,  -2,   0,   0,   1,   4,   7,   9,  12,  14,  16,  18,  20,  22,  24,  26,  29,  32,  34,  35,  36,  38,  41,  43,  43,  39,  37,  37,  37,  38,  41,  41,  42,  43,  44,  44,  43,  45,  46,  48,  49,  50,  50,  50,  50,  50,  50,  49,  48,  48,  47,  48,
-  /* -26.0 */  49,  51,  50,  47,  34,  32,  34,  34,  31,  28,  25,  22,  20,  17,  15,  14,  12,  10,   9,   8,   7,   6,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -2,  -3,  -4,  -3,  -5,  -6,  -7,  -8,  -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -0,  -0,   0,   1,   1,   1,   1,   2,   2,   4,   4,   4,   5,   6,   6,   8,   9,   9,  11,  13,  15,  16,  17,  18,  16,  20,  34,  41,  43,  41,  36,  29,  27,  25,  25,  23,  21,  19,  17,  14,  11,   7,   5,   4,   5,   5,   4,   2,  -0,  -2,  -6, -10, -11, -11, -10, -11, -11, -11, -10,  -9,  -7,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  13,  14,  14,  14,  14,  15,  16,  16,  17,  18,  19,  19,  20,  21,  22,  23,  25,  27,  29,  24,  25,  25,  25,  25,  26,  28,  31,  32,  34,  34,  30,  28,  29,  28,  27,  27,  26,  26,  26,  26,  26,  27,  26,  20,  19,  16,  13,  12,  10,  10,   6,   5,   4,   5,   5,   4,   5,   8,   9,   7,   5,   3,   2,   2,   2,   2,   2,   3,   3,   3,   2,   2,   2,   2,   2,   3,   2,   2,   1,   1,   0,  -1,  -2,  -4,  -5,  -7,  -9, -11, -13, -15, -17, -19, -20, -22, -24, -25, -27, -29, -30, -29, -31, -34, -36, -38, -39, -40, -40, -41, -42, -42, -42, -41, -39, -40, -40, -39, -38, -37, -37, -37, -38, -37, -35, -31, -27, -24, -22, -19, -17, -17, -17, -14, -12, -11, -11, -10,  -8,  -7,  -6,  -2,   0,   3,   4,   1,   2,   4,   8,  10,  12,  14,  17,  19,  21,  23,  24,  26,  28,  31,  35,  38,  39,  40,  42,  45,  45,  45,  42,  40,  40,  40,  41,  41,  43,  45,  46,  47,  46,  46,  47,  49,  50,  51,  51,  51,  52,  52,  51,  51,  50,  49,  49,  49,  49,
-  /* -25.0 */  50,  51,  51,  50,  39,  28,  34,  34,  31,  28,  25,  22,  19,  17,  15,  14,  12,  10,  10,   9,   8,   7,   5,   4,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -4,  -5,  -5,  -7,  -8,  -9,  -9, -10, -11, -11, -12, -12, -12, -13, -13, -13, -13, -12, -11, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,  -0,   0,   1,   1,   1,   2,   2,   3,   3,   3,   4,   5,   5,   8,   8,   8,  10,  11,  12,  14,  17,  18,  19,  16,  18,  36,  38,  41,  43,  39,  29,  27,  26,  25,  23,  21,  19,  17,  13,  10,   6,   4,   3,   2,   3,   4,   2,  -1,  -2,  -3,  -6, -10, -12, -11, -12, -11, -11,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   7,   8,   9,  10,  12,  12,  13,  13,  13,  14,  14,  14,  15,  16,  16,  17,  18,  19,  20,  21,  22,  23,  24,  26,  28,  26,  24,  24,  24,  24,  25,  28,  30,  32,  33,  33,  29,  28,  28,  27,  26,  24,  24,  24,  22,  21,  21,  19,  21,  15,  15,  12,  11,  11,   8,   7,   6,   4,   3,   3,   3,   2,   5,   8,   9,   7,   3,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,  -0,  -0,  -1,  -2,  -3,  -4,  -5,  -6,  -8, -10, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -32, -33, -32, -33, -36, -38, -39, -41, -41, -42, -43, -43, -43, -43, -43, -42, -41, -40, -39, -38, -38, -37, -37, -35, -34, -34, -30, -25, -22, -21, -18, -16, -16, -15, -12,  -9,  -7,  -6,  -7,  -6,  -4,  -3,  -3,   0,   2,   3,   3,   5,   7,  10,  13,  16,  19,  21,  24,  26,  27,  28,  29,  32,  34,  38,  41,  44,  46,  46,  47,  47,  47,  43,  43,  41,  43,  44,  44,  48,  47,  48,  49,  48,  48,  49,  51,  53,  54,  53,  52,  53,  53,  52,  52,  51,  50,  49,  49,  50,
-  /* -24.0 */  50,  52,  52,  51,  45,  24,  32,  33,  31,  28,  25,  22,  20,  17,  15,  14,  12,  11,  11,  10,   8,   7,   6,   4,   3,   2,   1,   0,  -1,  -2,  -4,  -4,  -4,  -5,  -6,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -12, -12, -13, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   6,   6,   8,   8,   9,  11,  12,  14,  16,  18,  19,  17,  17,  32,  34,  40,  43,  43,  31,  27,  24,  24,  23,  20,  18,  16,  13,   9,   5,   2,   1,  -1,  -0,  -0,  -1,  -3,  -2,  -3,  -4,  -6,  -8,  -9, -10, -12, -11, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   2,   3,   4,   5,   7,   8,   9,  11,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  16,  17,  18,  19,  20,  21,  22,  24,  26,  27,  25,  23,  23,  23,  23,  25,  28,  29,  31,  33,  32,  29,  27,  26,  26,  24,  23,  22,  21,  19,  17,  19,  18,  15,  11,  12,   9,   8,   9,   6,   4,   4,   3,   2,   2,   1,  -0,   5,   7,   8,   6,   2,  -1,  -2,  -2,  -1,  -1,  -1,  -1,  -0,  -1,  -2,  -2,  -2,  -1,  -1,  -2,  -2,  -3,  -3,  -4,  -5,  -6,  -8,  -9, -11, -13, -15, -17, -19, -22, -23, -25, -27, -29, -30, -31, -33, -34, -35, -35, -36, -38, -41, -42, -43, -43, -43, -44, -44, -44, -45, -44, -43, -42, -41, -40, -39, -37, -37, -35, -32, -32, -33, -30, -25, -21, -19, -16, -13, -11, -10,  -8,  -5,  -4,  -4,  -4,  -3,  -1,   0,   2,   3,   4,   3,   5,   7,  10,  13,  17,  22,  24,  26,  28,  31,  32,  32,  33,  35,  38,  42,  46,  47,  48,  49,  49,  49,  48,  45,  44,  46,  47,  46,  47,  48,  49,  51,  50,  50,  50,  51,  54,  55,  55,  54,  53,  53,  54,  54,  53,  52,  51,  50,  50,  50,
-  /* -23.0 */  50,  52,  52,  52,  51,  29,  28,  31,  30,  28,  25,  23,  20,  18,  16,  14,  13,  12,  11,  10,   9,   8,   6,   5,   3,   3,   2,   1,  -1,  -1,  -3,  -4,  -5,  -7,  -7,  -8,  -8,  -9,  -9, -10, -10, -11, -11, -11, -12, -11, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -8,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   1,   1,   2,   2,   3,   4,   4,   6,   7,   7,   8,   9,  10,  12,  14,  16,  18,  20,  18,  15,  33,  36,  40,  44,  43,  37,  25,  24,  23,  21,  19,  18,  16,  13,   9,   5,  -0,  -2,  -3,  -4,  -5,  -5,  -5,  -4,  -2,  -3,  -4,  -6,  -6,  -6, -11, -11, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   3,   4,   5,   7,   8,  10,  11,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  17,  17,  18,  19,  20,  22,  23,  25,  26,  25,  24,  22,  22,  23,  24,  28,  29,  30,  32,  32,  30,  27,  25,  23,  22,  21,  19,  18,  17,  16,  15,  15,  14,  12,  10,   6,   6,   6,   3,   1,   0,   1,  -0,  -0,  -1,  -1,   3,   4,   6,   3,   1,  -3,  -4,  -5,  -4,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -8,  -9, -11, -13, -14, -17, -18, -21, -23, -25, -27, -28, -30, -32, -33, -35, -36, -37, -38, -38, -38, -41, -43, -43, -44, -45, -45, -45, -45, -46, -46, -45, -44, -43, -41, -39, -37, -37, -36, -34, -32, -31, -32, -31, -27, -21, -16, -13, -10,  -9,  -7,  -5,  -5,  -2,  -0,   1,   2,   3,   4,   6,   8,   9,  11,  13,  15,  19,  22,  24,  26,  28,  30,  33,  36,  37,  37,  37,  39,  42,  46,  49,  50,  50,  51,  51,  51,  50,  50,  48,  48,  49,  48,  50,  51,  52,  52,  52,  52,  52,  53,  57,  58,  57,  52,  49,  50,  50,  52,  53,  54,  52,  51,  50,  50,
-  /* -22.0 */  50,  52,  52,  53,  52,  44,  26,  30,  30,  28,  26,  23,  21,  18,  15,  14,  13,  12,  11,  11,  10,   9,   8,   5,   4,   4,   2,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -6,  -7,  -8,  -9,  -9,  -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -8,  -7,  -7,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   1,   1,   2,   2,   3,   4,   6,   6,   7,   8,   9,  10,  11,  13,  16,  17,  19,  20,  15,  33,  37,  43,  44,  42,  39,  27,  23,  21,  21,  20,  18,  16,  14,   9,   4,  -1,  -3,  -4,  -6,  -6,  -7,  -6,  -5,  -3,  -3,  -4,  -5,  -5,  -6,  -8, -10, -10, -10, -10,  -9,  -8,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -3,  -2,  -1,   1,   2,   3,   4,   6,   8,   9,  10,  11,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  17,  17,  18,  19,  21,  22,  23,  24,  25,  24,  23,  22,  23,  24,  27,  28,  29,  30,  31,  29,  27,  25,  21,  19,  19,  18,  16,  16,  14,  13,  11,  10,  10,   8,   4,   3,   2,  -1,  -2,  -3,  -2,  -2,  -3,  -3,  -2,   0,   0,   4,   3,  -0,  -5,  -7,  -7,  -7,  -6,  -5,  -4,  -4,  -6,  -6,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -9, -10, -12, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -44, -45, -45, -46, -46, -46, -46, -46, -47, -47, -47, -45, -44, -42, -40, -35, -34, -36, -33, -31, -31, -31, -29, -27, -22, -15, -12,  -9,  -7,  -7,  -6,  -2,   0,   3,   5,   5,   5,   7,  10,  13,  14,  15,  16,  19,  21,  25,  27,  30,  31,  34,  37,  40,  41,  41,  42,  43,  46,  49,  51,  52,  54,  53,  53,  54,  53,  52,  51,  51,  52,  51,  54,  52,  54,  54,  54,  53,  53,  59,  60,  58,  54,  51,  60,  61,  60,  58,  57,  54,  53,  51,  50,  50,
-  /* -21.0 */  50,  52,  52,  53,  53,  52,  35,  27,  30,  28,  26,  23,  20,  18,  16,  14,  14,  12,  12,  11,  11,   9,   7,   6,   5,   4,   2,   1,   0,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -11, -11, -10, -10,  -9,  -8,  -7,  -6,  -6,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,   0,   0,   1,   1,   2,   3,   4,   6,   8,   8,   9,  10,  12,  14,  16,  18,  20,  20,  16,  32,  38,  43,  42,  43,  40,  29,  22,  23,  21,  21,  18,  16,  14,   9,   4,  -1,  -4,  -6,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -4,  -5,  -6,  -6,  -8, -11,  -9, -10,  -8,  -6,  -5,  -6,  -5,  -6,  -6,  -6,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -0,   1,   3,   4,   6,   7,   8,  10,  12,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  16,  17,  17,  18,  19,  20,  22,  22,  23,  23,  23,  22,  23,  25,  26,  25,  27,  29,  28,  29,  28,  24,  21,  18,  18,  16,  15,  14,  13,  12,  10,   8,   5,   4,   3,   0,  -2,  -4,  -5,  -5,  -6,  -7,  -6,  -6,  -5,  -4,  -3,   0,   3,  -1,  -6,  -9,  -9,  -9,  -9,  -8,  -1,  -2, -10,  -9,  -8,  -7,  -8,  -8,  -9,  -9, -10, -11, -12, -13, -15, -17, -19, -22, -23, -26, -28, -30, -32, -34, -35, -37, -39, -40, -41, -42, -42, -43, -43, -43, -46, -46, -46, -47, -48, -47, -47, -47, -47, -48, -47, -46, -44, -42, -39, -37, -35, -35, -33, -31, -30, -28, -27, -24, -22, -18, -12,  -9,  -8,  -6,  -3,   1,   4,   6,   7,   8,   9,  11,  14,  16,  17,  20,  22,  24,  26,  28,  31,  32,  34,  36,  40,  44,  44,  43,  44,  47,  50,  53,  54,  55,  55,  56,  55,  56,  56,  53,  52,  54,  54,  54,  57,  54,  57,  57,  54,  54,  62,  60,  60,  57,  50,  62,  64,  64,  63,  62,  60,  59,  54,  53,  51,  50,
-  /* -20.0 */  50,  51,  51,  51,  52,  52,  43,  24,  29,  29,  26,  23,  21,  18,  16,  15,  13,  12,  11,  10,   9,   9,  10,   7,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -6,  -6,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -11, -11, -11, -10, -10,  -9,  -8,  -8,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   2,   3,   5,   7,   8,   9,  11,  13,  15,  16,  18,  20,  19,  16,  34,  42,  43,  43,  44,  42,  30,  23,  24,  22,  20,  18,  16,  14,   9,   4,  -1,  -5,  -7,  -8,  -8,  -8,  -9,  -8,  -8,  -7,  -6, -10,  -6,  -6,  -7, -10,  -7,  -9,  -7,  -8,  -7,  -6,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -6,  -6,  -5,  -3,  -2,  -1,   1,   3,   4,   6,   7,   8,  10,  12,  12,  12,  12,  13,  13,  13,  13,  14,  15,  15,  16,  16,  17,  17,  18,  18,  19,  20,  21,  21,  23,  23,  24,  25,  25,  25,  26,  26,  26,  25,  23,  22,  19,  16,  15,  14,  13,  11,  11,  10,  10,   7,   5,   1,   1,  -1,  -4,  -4,  -9, -11,  -9, -10, -10,  -9,  -8,  -7,  -6,  -2,   1,  -1,  -7, -11, -11, -11, -11, -11, -11, -12, -12,  -7, -12, -10, -11, -11, -11, -12, -12, -13, -15, -16, -18, -21, -23, -25, -27, -29, -32, -33, -35, -37, -39, -40, -42, -44, -45, -46, -47, -46, -45, -45, -48, -48, -48, -48, -48, -49, -48, -48, -48, -48, -47, -46, -44, -42, -40, -37, -35, -34, -32, -30, -28, -26, -24, -22, -19, -17, -12,  -7,  -6,  -3,   1,   4,   8,   9,  10,  11,  14,  16,  18,  21,  23,  24,  24,  25,  28,  31,  33,  34,  37,  39,  43,  46,  45,  45,  48,  52,  55,  56,  57,  57,  57,  57,  57,  58,  56,  54,  55,  55,  55,  56,  58,  57,  58,  56,  56,  60,  59,  61,  58,  51,  55,  64,  65,  65,  64,  63,  61,  59,  57,  52,  51,  50,
-  /* -19.0 */  51,  50,  51,  51,  51,  50,  47,  26,  29,  29,  29,  25,  21,  18,  16,  14,  12,  12,  11,  10,  10,   9,   8,   6,   5,   4,   3,   2,   2,   2,   1,  -0,  -2,  -3,  -5,  -6,  -6,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   1,   2,   3,   4,   6,   8,  10,  12,  13,  15,  17,  19,  21,  14,  20,  35,  44,  43,  44,  43,  39,  30,  22,  23,  22,  19,  17,  16,  12,   8,   4,  -2,  -5,  -7,  -8,  -8, -11, -11,  -9,  -9, -10, -10, -11, -11,  -9,  -8,  -7,  -8, -11,  -9,  -8,  -7,  -6,  -5,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -6,  -5,  -3,  -2,  -0,   1,   3,   5,   6,   7,   8,  10,  11,  11,  12,  12,  12,  12,  13,  13,  13,  14,  15,  16,  16,  16,  16,  17,  17,  18,  19,  19,  19,  19,  20,  22,  24,  24,  26,  25,  23,  22,  22,  21,  20,  17,  14,  13,  12,  11,  10,   8,   6,   6,   6,   6,   2,  -2,  -5,  -6,  -7,  -7, -11, -12, -13, -12, -11, -10, -10,  -8,  -3,  -1,  -2,  -7, -13, -13, -14, -13, -13, -14, -15, -12, -10, -13, -13, -14, -15, -16, -15, -16, -17, -18, -20, -22, -25, -27, -29, -31, -34, -36, -37, -39, -41, -42, -44, -45, -47, -49, -49, -50, -51, -48, -47, -51, -51, -51, -50, -49, -50, -49, -49, -48, -47, -46, -45, -44, -42, -40, -37, -35, -33, -31, -29, -27, -24, -22, -20, -17, -15, -14,  -7,  -4,  -0,   4,   8,  10,  11,  13,  16,  18,  20,  22,  24,  27,  29,  28,  29,  31,  34,  36,  37,  40,  42,  45,  47,  48,  49,  52,  56,  58,  59,  58,  58,  58,  58,  58,  59,  57,  57,  57,  58,  57,  56,  58,  58,  57,  57,  59,  59,  61,  60,  58,  53,  64,  66,  66,  65,  64,  63,  61,  59,  57,  55,  51,  51,
-  /* -18.0 */  50,  51,  50,  49,  49,  48,  47,  33,  26,  29,  27,  25,  21,  18,  16,  14,  13,  13,  11,  10,   9,   8,   7,   7,   6,   4,   5,   3,   3,   3,   3,   3,  -0,  -3,  -4,  -4,  -6,  -7,  -6,  -7,  -8,  -9,  -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -2,  -2,  -1,  -0,   1,   2,   4,   5,   8,  10,  12,  14,  16,  17,  17,  13,  18,  27,  38,  44,  44,  45,  41,  38,  30,  22,  22,  22,  21,  16,  13,  10,   6,   2,  -1,  -3,  -6,  -8,  -9, -13, -13, -11, -12, -12, -11, -11, -10, -10,  -9,  -8,  -6, -11,  -7,  -9,  -8,  -7,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -6,  -5,  -3,  -1,  -0,   2,   3,   5,   6,   7,   8,  10,  10,  11,  12,  12,  13,  13,  13,  13,  13,  14,  15,  15,  16,  16,  16,  16,  16,  16,  17,  18,  17,  17,  18,  20,  22,  25,  26,  24,  21,  20,  19,  18,  17,  14,  12,  11,  10,   9,   8,   4,   3,   2,   3,   4,   2,  -4,  -8, -10, -10,  -9, -11, -13, -14, -15, -14, -14, -11, -10,  -7,  -5,  -5,  -7, -13, -15, -16, -16, -16, -16, -16, -17, -17, -16, -16, -16, -17, -18, -19, -20, -21, -22, -24, -26, -29, -31, -33, -36, -38, -40, -41, -42, -44, -45, -47, -49, -50, -52, -53, -52, -54, -52, -48, -53, -53, -52, -52, -51, -50, -51, -49, -48, -47, -45, -44, -43, -41, -39, -36, -34, -32, -30, -27, -25, -22, -19, -17, -14, -12, -10,  -7,  -5,   0,   6,   8,  12,  14,  17,  20,  22,  24,  27,  28,  29,  32,  32,  33,  35,  37,  39,  41,  44,  45,  48,  50,  50,  51,  54,  57,  60,  60,  59,  58,  59,  60,  60,  60,  59,  59,  60,  60,  59,  57,  59,  58,  58,  59,  61,  60,  60,  60,  57,  58,  65,  67,  66,  65,  64,  63,  61,  59,  57,  56,  53,  50,
-  /* -17.0 */  51,  50,  49,  48,  47,  46,  45,  36,  24,  28,  27,  24,  20,  17,  16,  14,  12,  12,  11,  10,   9,   8,   7,   7,   6,   6,   5,   4,   5,   5,   3,   1,  -1,  -3,  -2,  -3,  -3,  -4,  -6,  -7,  -7,  -8,  -9, -10, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -1,  -0,   1,   3,   5,   7,  10,  13,  15,  16,  14,  12,  19,  30,  39,  45,  45,  44,  43,  36,  25,  21,  23,  22,  22,  19,  14,  10,   7,   4,   1,  -1,  -3,  -4,  -7,  -9, -12, -12, -13, -15, -15, -12, -12, -11, -10,  -9,  -8, -12, -10, -10,  -9,  -8,  -8,  -7,  -7,  -6,  -7,  -7,  -8,  -8,  -7,  -6,  -4,  -2,  -1,   0,   2,   4,   5,   6,   7,   9,   9,  10,  11,  11,  12,  12,  13,  13,  13,  13,  13,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  17,  18,  21,  22,  23,  24,  22,  21,  19,  18,  17,  15,  13,  11,  10,   9,   7,   7,   7,  -0,  -1,   1,   1,  -3,  -9, -11, -11, -11, -12, -13, -13, -15, -18, -17, -16, -14, -12, -13, -11,  -8,  -9, -13, -17, -17, -18, -18, -17, -17, -19, -19, -17, -17, -20, -21, -22, -23, -24, -24, -26, -28, -30, -33, -35, -38, -40, -42, -44, -45, -46, -47, -49, -50, -52, -54, -55, -56, -57, -56, -54, -51, -55, -54, -54, -53, -52, -49, -51, -49, -48, -46, -44, -42, -42, -40, -37, -35, -33, -31, -28, -25, -22, -20, -17, -14, -10,  -9,  -6,  -6,  -4,  -0,   7,  12,  16,  19,  22,  24,  26,  29,  31,  33,  31,  33,  35,  36,  38,  39,  43,  45,  45,  48,  50,  52,  52,  54,  57,  59,  61,  62,  59,  60,  61,  63,  63,  63,  61,  61,  61,  61,  60,  60,  60,  59,  58,  60,  59,  60,  60,  60,  58,  62,  66,  66,  66,  65,  63,  62,  61,  59,  58,  55,  54,  51,
-  /* -16.0 */  52,  49,  48,  46,  45,  44,  42,  34,  22,  28,  26,  23,  20,  17,  16,  14,  12,  12,  11,  10,   9,   8,   7,   7,   7,   6,   6,   5,   5,   4,   2,   1,  -1,   1,  -0,  -2,  -4,  -5,  -5,  -5,  -6,  -8,  -9, -10, -10, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -1,   0,   2,   5,   7,  10,  13,  15,  13,  15,  30,  38,  42,  45,  45,  46,  41,  32,  25,  22,  22,  24,  22,  21,  17,  13,   9,   5,   2,  -0,  -2,  -4,  -5,  -6,  -8, -11, -13, -13, -14, -14, -13, -12, -11,  -9,  -9,  -8,  -9, -14, -11,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -4,  -3,  -2,  -0,   2,   3,   5,   6,   7,   8,   9,  10,  10,  11,  11,  12,  13,  14,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  16,  20,  23,  24,  24,  22,  20,  18,  17,  16,  14,  12,  10,   8,   7,   7,   5,   3,   2,  -3,  -5,  -9,  -8, -10, -12, -11, -10, -14, -15, -16, -15, -22, -20, -21, -19, -18, -18, -17, -13, -10, -14, -18, -19, -20, -20, -19, -20, -21, -22, -20, -19, -21, -25, -26, -27, -27, -28, -29, -32, -34, -37, -40, -42, -45, -46, -48, -50, -50, -51, -52, -54, -55, -57, -58, -59, -59, -58, -57, -54, -57, -56, -56, -54, -53, -52, -50, -49, -46, -45, -43, -40, -40, -37, -35, -33, -31, -28, -25, -22, -19, -18, -15, -11,  -9,  -8,  -6,  -3,  -1,   2,   8,  14,  20,  22,  25,  27,  29,  33,  34,  35,  34,  35,  37,  39,  41,  43,  45,  47,  49,  50,  51,  52,  54,  56,  59,  62,  63,  62,  61,  63,  63,  64,  64,  63,  61,  61,  61,  62,  63,  62,  62,  61,  61,  60,  60,  59,  61,  60,  62,  64,  66,  66,  65,  64,  62,  61,  59,  58,  56,  54,  53,  52,
-  /* -15.0 */  49,  48,  46,  45,  44,  42,  38,  27,  27,  29,  26,  23,  20,  17,  15,  14,  13,  12,  11,  10,   9,   8,   7,   7,   6,   6,   6,   5,   3,   2,   1,   1,   2,   0,  -2,  -3,  -4,  -5,  -5,  -6,  -7,  -8,  -9, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -0,   2,   4,   7,  10,  12,  11,  15,  30,  38,  44,  46,  47,  47,  45,  33,  27,  27,  26,  25,  22,  20,  19,  16,  13,   8,   3,  -0,  -2,  -4,  -5,  -6,  -7,  -9, -12, -14, -15, -14, -13, -13, -13, -11, -10, -11,  -8, -13, -14, -12, -11,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -0,   1,   3,   5,   6,   7,   9,  10,  10,  10,  11,  12,  12,  12,  13,  13,  13,  13,  14,  13,  13,  13,  13,  13,  14,  14,  14,  14,  15,  15,  16,  18,  21,  22,  24,  22,  20,  18,  16,  15,  13,  11,   9,   7,   5,   4,   3,   2,  -0,  -3,  -8,  -9, -10, -11, -10, -12, -14, -16, -18, -19, -20, -23, -21, -23, -24, -26, -23, -20, -18, -14, -15, -19, -22, -22, -23, -22, -22, -23, -24, -27, -24, -24, -28, -29, -30, -31, -32, -33, -36, -38, -41, -43, -46, -49, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -61, -58, -56, -56, -59, -58, -57, -55, -54, -53, -49, -48, -44, -43, -41, -40, -37, -34, -32, -31, -28, -25, -22, -18, -15, -14, -12,  -8,  -5,  -3,  -1,   1,   4,   6,  10,  15,  21,  26,  28,  30,  32,  35,  37,  37,  37,  39,  41,  43,  45,  47,  48,  51,  53,  52,  52,  54,  56,  58,  61,  64,  65,  63,  63,  64,  64,  63,  62,  61,  62,  62,  63,  63,  63,  64,  63,  64,  62,  61,  62,  63,  59,  54,  62,  64,  65,  65,  64,  63,  61,  59,  58,  56,  55,  53,  51,  49,
-  /* -14.0 */  47,  46,  44,  43,  38,  36,  32,  31,  33,  30,  29,  24,  19,  17,  16,  14,  13,  13,  12,  10,   9,   8,   7,   7,   6,   6,   5,   4,   3,   2,   3,   1,  -1,  -2,  -3,  -3,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -9,  -9,  -9, -10, -10, -10,  -9, -10,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   1,   4,   6,   9,   9,  12,  24,  38,  37,  40,  45,  49,  44,  34,  31,  29,  29,  28,  25,  21,  19,  18,  15,  12,  10,   4,  -2,  -4,  -6,  -8,  -9, -10, -10, -11, -15, -17, -14, -13, -13, -13, -14, -12, -10,  -9, -12, -13, -12, -11, -10,  -9,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   4,   5,   6,   8,   9,   9,  10,  10,  11,  11,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  13,  13,  13,  13,  14,  15,  15,  16,  17,  19,  21,  22,  22,  21,  18,  16,  14,  12,   9,   6,   5,   4,   3,   1,  -0,  -2,  -5,  -7, -11, -11, -12, -11, -16, -17, -19, -20, -20, -22, -24, -23, -25, -26, -27, -25, -24, -18, -16, -16, -22, -24, -24, -25, -25, -25, -26, -27, -29, -29, -27, -31, -32, -34, -35, -36, -37, -40, -42, -45, -47, -50, -53, -55, -56, -58, -59, -60, -60, -61, -62, -62, -62, -64, -64, -63, -61, -60, -60, -59, -59, -56, -55, -53, -50, -46, -42, -41, -40, -38, -35, -30, -28, -27, -25, -21, -17, -14,  -9, -10,  -8,  -4,  -1,   1,   3,   6,   8,  10,  14,  19,  22,  27,  29,  32,  34,  36,  38,  39,  42,  42,  45,  48,  50,  51,  52,  54,  55,  55,  55,  57,  59,  62,  64,  66,  65,  64,  65,  64,  62,  62,  63,  63,  63,  64,  65,  66,  65,  64,  64,  65,  64,  64,  63,  62,  62,  52,  57,  65,  64,  64,  63,  61,  59,  58,  56,  54,  53,  51,  50,  47,
-  /* -13.0 */  41,  44,  41,  36,  36,  34,  32,  29,  28,  25,  24,  21,  19,  17,  15,  14,  13,  14,  13,  12,  10,   9,   8,   7,   7,   6,   4,   4,   3,   2,   1,   0,  -0,  -1,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -6,  -7,  -7,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -2,  -1,   1,   4,   6,   6,   7,  17,  32,  36,  34,  36,  41,  37,  31,  30,  31,  31,  29,  27,  24,  21,  19,  17,  13,  12,  11,   5,  -2,  -5,  -8,  -8,  -8, -11, -12, -12, -16, -18, -14, -13, -14, -16, -13, -12, -11, -11, -11, -12, -13, -12, -10,  -9,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   5,   7,   9,   9,   9,  10,  10,  10,  11,  12,  12,  14,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  14,  15,  16,  17,  18,  22,  21,  22,  22,  18,  15,  13,  11,   8,   5,   4,   2,   1,   0,  -2,  -5,  -5,  -6, -10, -14, -12, -15, -19, -17, -21, -22, -21, -22, -25, -27, -28, -27, -22, -27, -27, -21, -18, -21, -26, -26, -27, -28, -27, -28, -29, -30, -32, -34, -31, -34, -36, -37, -38, -39, -42, -44, -46, -49, -51, -54, -57, -59, -60, -62, -64, -64, -64, -64, -65, -65, -65, -66, -67, -65, -66, -63, -60, -61, -59, -57, -56, -53, -48, -43, -42, -40, -38, -37, -31, -26, -24, -22, -19, -17, -13, -10,  -6,  -4,  -3,   1,   3,   5,   7,  11,  12,  15,  18,  23,  26,  29,  32,  35,  36,  37,  39,  42,  44,  46,  49,  52,  54,  55,  56,  57,  58,  58,  59,  60,  61,  64,  67,  65,  64,  66,  65,  65,  65,  64,  64,  64,  64,  65,  67,  68,  68,  66,  66,  64,  65,  64,  63,  62,  59,  48,  59,  62,  62,  62,  60,  59,  57,  56,  54,  52,  50,  48,  46,  41,
-  /* -12.0 */  43,  41,  39,  35,  34,  31,  31,  27,  26,  25,  23,  20,  18,  17,  15,  15,  14,  14,  14,  13,  10,   9,   8,   7,   7,   6,   5,   4,   3,   3,   2,   1,   0,  -0,  -2,  -2,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -8,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   3,   4,   2,  10,  24,  32,  33,  31,  31,  31,  28,  27,  29,  29,  30,  27,  23,  21,  19,  18,  15,  11,   9,   8,   2,  -5,  -8, -10,  -9, -11, -14, -16, -14, -15, -17, -16, -16, -16, -16, -13, -12, -12, -12, -11, -12, -13, -12, -11,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -2,  -0,   2,   3,   5,   6,   7,   9,  10,  10,  10,  10,  11,  11,  12,  12,  12,  13,  13,  12,  12,  11,  11,  11,  11,  11,  11,  12,  12,  13,  14,  15,  16,  17,  17,  19,  21,  22,  21,  19,  15,  12,  10,   7,   5,   3,   1,  -0,  -2,  -3,  -5,  -7,  -9, -10, -13, -13, -16, -19, -19, -23, -24, -24, -23, -26, -27, -26, -24, -27, -28, -29, -25, -24, -26, -29, -29, -30, -30, -30, -31, -32, -33, -35, -37, -34, -36, -39, -41, -42, -44, -46, -48, -51, -53, -55, -58, -61, -63, -64, -66, -68, -68, -68, -68, -68, -69, -68, -68, -69, -68, -67, -65, -62, -63, -59, -58, -56, -52, -48, -44, -39, -38, -36, -33, -28, -24, -21, -17, -14, -13,  -9,  -7,  -3,   0,   3,   6,   7,   8,  10,  13,  15,  17,  21,  23,  25,  30,  35,  37,  38,  41,  43,  45,  46,  49,  52,  54,  56,  57,  59,  60,  61,  62,  62,  62,  63,  67,  69,  68,  67,  68,  67,  67,  65,  65,  66,  66,  66,  67,  65,  67,  68,  67,  63,  67,  64,  62,  61,  60,  56,  46,  58,  61,  60,  60,  58,  57,  53,  52,  50,  49,  46,  46,  42,  43,
-  /* -11.0 */  39,  38,  34,  33,  31,  29,  28,  27,  26,  24,  22,  20,  19,  17,  17,  15,  15,  15,  15,  12,  11,   9,   8,   8,   7,   6,   6,   5,   5,   4,   3,   3,   2,   1,  -0,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -8,  -9,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -9,  -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -1,   1,   2,  -0,   2,  15,  27,  32,  31,  29,  28,  26,  27,  28,  28,  27,  27,  24,  21,  19,  18,  15,  11,   7,   2,  -2,  -4,  -9, -10, -10, -11, -12, -16, -19, -17, -16, -16, -16, -17, -17, -16, -16, -13, -12, -13, -12, -10, -10, -12, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -7,  -6,  -5,  -3,  -1,   1,   2,   4,   6,   7,   8,  10,  11,  12,  11,  11,  11,  11,  12,  13,  13,  13,  13,  12,  12,  12,  11,  11,  11,  10,  10,  11,  11,  12,  13,  14,  14,  15,  17,  18,  18,  20,  19,  16,  13,  10,   8,   6,   4,   1,  -1,  -1,  -3,  -4,  -6,  -9, -10, -11, -12, -14, -15, -17, -18, -22, -25, -24, -24, -27, -27, -29, -29, -30, -31, -30, -31, -30, -30, -31, -30, -31, -32, -32, -33, -34, -36, -37, -38, -36, -38, -42, -45, -47, -48, -50, -52, -55, -57, -58, -62, -65, -67, -69, -70, -71, -72, -72, -72, -72, -72, -72, -70, -70, -70, -68, -67, -63, -65, -60, -57, -55, -52, -48, -44, -39, -37, -33, -29, -26, -23, -19, -14,  -8,  -8,  -7,  -5,  -2,  -0,   3,   5,   5,   4,   7,  11,  13,  16,  18,  23,  27,  29,  30,  31,  37,  42,  46,  48,  49,  52,  55,  57,  59,  59,  60,  62,  63,  64,  66,  66,  67,  69,  72,  72,  70,  70,  69,  68,  69,  72,  75,  74,  74,  72,  70,  65,  69,  68,  65,  64,  58,  62,  56,  55,  52,  54,  58,  59,  57,  56,  52,  51,  49,  46,  45,  43,  41,  40,  39,  39,
-  /* -10.0 */  35,  33,  31,  30,  29,  27,  27,  26,  25,  22,  21,  20,  18,  17,  16,  15,  16,  15,  14,  13,  11,  10,   8,   8,   7,   7,   7,   6,   6,   5,   5,   4,   2,   2,   0,  -1,  -1,  -2,  -2,  -3,  -3,   1,  -2,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -1,   1,   0,  -1,   9,  20,  24,  28,  27,  23,  26,  26,  27,  27,  26,  25,  23,  21,  18,  16,  14,  11,   7,   3,  -1,  -4,  -4,  -7, -10, -12, -12, -13, -15, -19, -19, -19, -19, -17, -16, -15, -17, -17, -14, -12, -12, -11,  -9,  -9, -12, -11, -11, -11, -10, -10,  -9,  -8,  -7,  -7,  -6,  -4,  -3,  -1,   2,   4,   5,   7,   8,   9,  10,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  11,  10,  10,  10,  10,  10,  10,  11,  11,  12,  13,  14,  15,  17,  17,  17,  16,  13,  11,   8,   6,   4,   2,  -2,  -4,  -5,  -5,  -7,  -6,  -9, -13, -12, -11, -12, -17, -15, -19, -22, -23, -24, -27, -31, -30, -32, -32, -33, -33, -34, -33, -33, -32, -30, -32, -33, -33, -34, -35, -36, -38, -39, -38, -39, -42, -46, -49, -51, -52, -54, -56, -59, -61, -63, -65, -68, -71, -73, -74, -75, -76, -76, -76, -75, -75, -75, -74, -71, -70, -69, -68, -65, -65, -60, -58, -54, -52, -47, -43, -39, -35, -32, -27, -23, -21, -16, -11,  -6,  -5,  -8,  -7,  -4,  -2,   1,   5,  10,  10,  11,  14,  16,  19,  27,  36,  34,  27,  27,  33,  33,  36,  42,  47,  50,  52,  55,  58,  60,  61,  63,  65,  64,  66,  68,  69,  70,  72,  74,  74,  71,  69,  69,  75,  78,  78,  77,  74,  73,  73,  71,  70,  67,  66,  63,  63,  63,  58,  60,  60,  58,  58,  57,  56,  54,  51,  50,  47,  44,  43,  41,  39,  38,  36,  35,  35,
-  /*  -9.0 */  32,  29,  29,  27,  26,  25,  24,  24,  23,  22,  20,  19,  17,  17,  16,  15,  15,  15,  13,  12,  11,   9,  12,   9,   8,   8,   8,   7,   7,   7,   5,   5,   3,   2,   1,   0,   0,  -0,  -1,  -0,   2,  -2,  -3,  -3,  -4,  -6,  -7,  -8,  -8,  -9, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -12, -12, -12, -11, -11, -10, -10,  -9,  -9,  -9,  -9,  -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -10,  -9,  -8,  -7,  -5,  -4,  -2,  -0,   0,  -2,   6,  14,  19,  19,  18,  19,  21,  25,  25,  26,  26,  24,  23,  20,  17,  14,  12,  11,   8,   4,   1,  -3,  -5,  -8, -10, -13, -15, -16, -16, -17, -21, -22, -21, -21, -20, -19, -18, -16, -14, -14, -12, -11,  -9,  -8,  -7,  -8, -11, -11, -11, -10, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -0,   2,   4,   6,   8,   9,  10,  12,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  12,  10,  10,   9,   9,   9,   9,   9,  10,  10,  11,  11,  13,  16,  16,  15,  13,  10,   8,   6,   4,   2,  -0,  -3,  -6,  -8, -10,  -9,  -8, -12, -14, -13, -11, -12, -14, -13, -19, -21, -24, -25, -31, -33, -33, -34, -35, -35, -37, -34, -38, -35, -34, -34, -34, -36, -35, -36, -37, -38, -40, -41, -40, -44, -46, -49, -52, -54, -56, -58, -60, -63, -64, -66, -69, -72, -75, -76, -78, -79, -80, -80, -79, -78, -77, -77, -76, -74, -72, -70, -68, -65, -65, -60, -58, -55, -50, -46, -42, -37, -32, -30, -25, -21, -17, -13, -10,  -9,  -9,  -6,  -3,   1,   7,  11,  16,  21,  24,  27,  31,  35,  33,  36,  40,  37,  35,  32,  37,  42,  42,  37,  34,  41,  46,  52,  56,  60,  62,  65,  67,  66,  67,  69,  70,  71,  73,  75,  74,  74,  71,  77,  82,  78,  78,  78,  77,  74,  73,  71,  70,  69,  67,  63,  62,  62,  54,  60,  59,  56,  56,  54,  52,  49,  48,  45,  43,  42,  41,  39,  38,  36,  35,  33,  32,
-  /*  -8.0 */  29,  27,  26,  25,  24,  22,  21,  21,  20,  20,  19,  18,  17,  17,  17,  16,  15,  15,  14,  12,  12,  10,  10,  10,   9,   9,   9,   9,   8,   8,   6,   5,   4,   3,   2,   2,   2,   1,   0,   3,   1,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -8,  -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -10,  -9,  -8,  -7,  -5,  -4,  -2,  -0,  -0,  -2,   9,  15,  20,  13,  12,  15,  21,  23,  24,  26,  24,  22,  20,  18,  15,  11,  10,   8,   4,   1,  -1,  -4,  -7, -10, -14, -16, -18, -19, -19, -20, -22, -23, -23, -23, -23, -23, -22, -19, -16, -13, -11, -10,  -8,  -6,  -5,  -5, -10, -11, -11, -11,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -2,   0,   2,   4,   6,   8,  10,  11,  12,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  13,  13,  10,  10,   9,   9,   8,   8,   8,   9,   9,  10,  11,  13,  13,  12,  10,   7,   6,   4,   1,  -1,  -3,  -5,  -7,  -8, -12, -14, -11, -12, -11, -14, -14, -15, -17, -15, -17, -22, -25, -27, -29, -34, -35, -36, -37, -38, -40, -36, -40, -38, -36, -37, -36, -37, -38, -38, -39, -41, -42, -43, -44, -47, -50, -53, -55, -58, -60, -61, -63, -66, -69, -69, -72, -76, -79, -80, -82, -82, -83, -84, -83, -82, -81, -80, -79, -77, -75, -72, -70, -66, -65, -61, -58, -54, -50, -45, -42, -35, -30, -26, -23, -19, -15, -13, -12, -12,  -7,   2,  12,  19,  24,  25,  27,  30,  33,  34,  33,  35,  37,  37,  38,  38,  41,  43,  45,  46,  48,  46,  42,  42,  46,  47,  51,  59,  63,  66,  67,  68,  69,  70,  71,  72,  74,  75,  75,  74,  75,  84,  75,  68,  72,  73,  69,  71,  69,  69,  68,  70,  65,  63,  61,  57,  59,  58,  56,  54,  51,  50,  49,  47,  44,  42,  41,  39,  39,  37,  36,  34,  33,  31,  29,
-  /*  -7.0 */  27,  25,  24,  22,  21,  21,  20,  19,  20,  19,  18,  17,  17,  17,  17,  16,  15,  14,  14,  13,  12,  12,  11,  11,  11,  10,  10,   9,   9,   8,   7,   6,   5,   4,   4,   3,   3,   3,   2,   0,  -0,  -0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -10, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -12, -12, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -14, -13, -13, -13, -12, -12, -11, -10,  -8,  -7,  -5,  -3,  -2,  -0,  -2,   3,   9,  17,  19,  11,  12,  16,  20,  22,  23,  24,  23,  22,  19,  16,  13,   9,   7,   4,   1,  -2,  -4,  -6,  -9, -12, -16, -18, -20, -21, -21, -21, -22, -23, -24, -24, -25, -24, -23, -21, -18, -14, -11, -10,  -9,  -6,  -4,  -4,  -9, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -2,  -1,   1,   3,   5,   8,   9,  10,  12,  13,  14,  15,  16,  16,  16,  16,  16,  15,  15,  15,  16,  16,  16,  16,  15,  13,  11,  10,   9,   9,   8,   8,   7,   7,   8,  11,  13,  11,  10,   9,   7,   5,   3,   1,  -2,  -5,  -7,  -9, -10, -11, -13, -16, -15, -11, -11, -13, -14, -16, -16, -19, -20, -22, -25, -27, -30, -34, -36, -37, -38, -39, -40, -43, -43, -39, -39, -38, -38, -39, -39, -40, -42, -43, -44, -45, -49, -51, -53, -56, -58, -61, -63, -65, -66, -69, -73, -73, -74, -78, -82, -84, -85, -86, -86, -87, -86, -84, -82, -81, -81, -78, -76, -73, -70, -65, -64, -61, -58, -52, -48, -44, -40, -34, -29, -23, -18, -17, -15, -12,  -9,  -6,   8,  20,  22,  22,  24,  25,  28,  31,  34,  37,  39,  41,  43,  44,  44,  49,  48,  48,  49,  50,  50,  50,  50,  50,  45,  42,  46,  54,  63,  67,  68,  70,  70,  70,  72,  73,  75,  76,  77,  77,  78,  73,  60,  59,  65,  67,  70,  68,  60,  63,  70,  67,  62,  59,  56,  59,  58,  55,  53,  52,  50,  48,  46,  44,  42,  40,  39,  37,  37,  35,  32,  31,  30,  29,  27,
-  /*  -6.0 */  26,  24,  22,  21,  20,  19,  19,  18,  19,  18,  17,  17,  17,  17,  17,  16,  16,  15,  15,  14,  13,  12,  12,  12,  12,  11,  11,  10,  10,  10,   9,   7,   7,   6,   5,   5,   4,   3,   3,   1,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -10, -11, -12, -13, -14, -14, -14, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11,  -9,  -8,  -6,  -5,  -3,  -1,  -0,  -3,   8,  10,  17,  19,  14,  13,  15,  18,  20,  22,  23,  23,  21,  18,  14,  12,   8,   3,   1,  -2,  -5,  -6,  -9, -11, -14, -17, -19, -21, -21, -22, -22, -23, -24, -24, -26, -25, -24, -23, -22, -19, -15, -12, -11,  -8,  -7,  -5,  -5,  -8,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -3,  -2,  -1,   1,   2,   4,   6,   8,  10,  12,  13,  14,  15,  16,  17,  18,  17,  17,  16,  16,  16,  16,  16,  17,  17,  17,  16,  15,  12,  11,   9,   9,   8,   7,   7,   7,   8,   9,  11,   7,   6,   5,   4,   1,  -1,  -4,  -6,  -8, -10, -13, -15, -15, -15, -16, -15, -13, -13, -13, -15, -18, -18, -20, -20, -19, -23, -28, -32, -34, -37, -39, -39, -40, -41, -42, -42, -42, -41, -40, -40, -39, -41, -42, -43, -44, -45, -49, -51, -54, -56, -59, -61, -64, -66, -68, -69, -72, -76, -77, -76, -80, -86, -87, -88, -89, -89, -90, -90, -89, -87, -86, -84, -81, -77, -75, -71, -66, -63, -61, -56, -51, -48, -44, -37, -31, -27, -21, -17, -17, -12, -10,  -4,   8,  14,  19,  21,  24,  26,  28,  31,  34,  37,  40,  42,  44,  46,  47,  50,  49,  51,  52,  55,  55,  54,  54,  53,  53,  50,  35,  44,  53,  58,  66,  68,  70,  70,  70,  73,  75,  79,  81,  82,  81,  72,  71,  70,  75,  81,  75,  60,  57,  56,  71,  65,  63,  60,  60,  60,  58,  56,  54,  52,  49,  47,  45,  44,  42,  40,  39,  37,  36,  34,  33,  32,  31,  28,  27,  26,
-  /*  -5.0 */  24,  23,  21,  20,  20,  19,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  16,  15,  14,  14,  13,  13,  13,  13,  12,  12,  12,  11,  11,  10,   9,   8,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -12, -12, -13, -14, -14, -15, -15, -16, -16, -17, -17, -17, -17, -16, -16, -16, -16, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -10,  -9,  -8,  -6,  -4,  -2,  -0,   1,  -2,  11,  17,  18,  11,  10,  11,  15,  19,  21,  21,  22,  20,  19,  15,  13,  10,   6,   0,  -3,  -4,  -6,  -8, -11, -13, -16, -18, -20, -21, -22, -22, -22, -24, -25, -25, -26, -26, -25, -23, -22, -19, -15, -12, -10,  -8,  -7,  -6,  -7,  -8,  -8,  -7,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   2,   3,   5,   7,   9,  11,  12,  14,  15,  16,  17,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  14,  12,  10,   9,   8,   8,   7,   7,   6,   6,   4,   4,   3,   2,   0,  -2,  -6,  -8, -10, -12, -14, -15, -16, -17, -16, -16, -15, -13, -15, -15, -16, -19, -20, -19, -19, -18, -23, -27, -30, -34, -38, -40, -41, -42, -42, -43, -43, -43, -43, -42, -42, -41, -43, -41, -41, -44, -49, -51, -54, -56, -59, -61, -64, -66, -69, -71, -72, -75, -78, -81, -81, -84, -88, -90, -91, -91, -92, -93, -93, -92, -88, -87, -86, -83, -79, -76, -72, -67, -64, -60, -56, -50, -46, -42, -35, -30, -24, -19, -19, -15,  -9,  -4,   8,  13,  16,  20,  23,  26,  28,  30,  33,  36,  40,  43,  45,  47,  47,  50,  54,  54,  57,  57,  56,  56,  58,  58,  58,  56,  55,  43,  49,  59,  57,  68,  68,  70,  69,  72,  76,  81,  84,  81,  77,  70,  68,  74,  78,  80,  82,  80,  74,  58,  60,  64,  66,  66,  63,  61,  59,  57,  54,  52,  50,  47,  45,  43,  42,  41,  39,  37,  35,  34,  33,  31,  29,  28,  27,  26,  24,
-  /*  -4.0 */  24,  22,  21,  20,  19,  19,  18,  18,  18,  18,  16,  17,  17,  16,  17,  17,  17,  16,  15,  14,  14,  14,  14,  14,  14,  14,  13,  12,  13,  12,  12,  11,  10,   9,   8,   7,   6,   4,   3,   2,   1,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -9,  -9, -10, -11, -12, -13, -14, -15, -15, -16, -16, -17, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -11,  -9,  -8,  -7,  -5,  -3,  -1,   1,   2,   0,   8,  16,  17,  13,  10,  12,  16,  20,  21,  21,  20,  18,  16,  13,  10,   8,   4,  -2,  -5,  -6,  -7,  -8, -10, -12, -16, -20, -20, -20, -21, -22, -23, -24, -25, -25, -26, -27, -26, -23, -21, -19, -15, -13, -10,  -8,  -9,  -8,  -8,  -7,  -6,  -6,  -6,  -4,  -3,  -3,  -2,  -1,   0,   1,   3,   5,   6,   7,  10,  11,  13,  14,  16,  17,  18,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  15,  14,  12,  11,   9,   8,   8,   5,   5,   5,   3,   3,   3,   1,  -2,  -6,  -9, -10, -13, -14, -15, -17, -18, -18, -18, -16, -15, -12, -12, -15, -17, -19, -20, -19, -19, -18, -21, -24, -31, -33, -37, -40, -41, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -42, -44, -49, -51, -54, -56, -59, -61, -64, -67, -69, -71, -73, -75, -77, -81, -84, -86, -87, -90, -92, -93, -94, -94, -95, -94, -94, -91, -87, -87, -85, -80, -76, -73, -66, -63, -60, -55, -49, -44, -39, -33, -28, -22, -19, -19, -10,  -3,   7,  11,  14,  17,  21,  24,  27,  29,  32,  35,  39,  42,  44,  48,  50,  48,  51,  57,  57,  61,  59,  56,  58,  59,  59,  59,  59,  58,  57,  54,  65,  67,  70,  76,  81,  82,  81,  77,  79,  78,  77,  75,  75,  77,  79,  81,  81,  80,  78,  74,  66,  63,  63,  65,  64,  61,  59,  56,  54,  52,  50,  48,  45,  44,  43,  41,  40,  38,  35,  34,  32,  30,  29,  29,  27,  26,  25,  24,
-  /*  -3.0 */  23,  21,  20,  20,  19,  19,  18,  18,  18,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  14,  14,  15,  15,  14,  14,  14,  14,  14,  13,  12,  11,  10,   9,   8,   7,   6,   5,   4,   3,   1,  -0,  -1,  -3,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -17, -18, -18, -19, -19, -19, -20, -19, -19, -19, -18, -18, -18, -17, -17, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -11, -10,  -8,  -7,  -6,  -4,  -3,  -0,   2,   4,   3,   5,  10,  22,  16,  10,  14,  18,  20,  20,  19,  18,  17,  14,  10,   8,   6,   2,  -2,  -4,  -7,  -9, -12, -15, -15, -15, -18, -18, -19, -20, -22, -22, -24, -25, -26, -26, -27, -27, -24, -22, -20, -16, -13, -11, -11, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   4,   5,   6,   8,  10,  11,  13,  15,  16,  18,  19,  20,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  17,  15,  14,  13,  11,  10,   8,   8,   7,   4,   4,   5,   4,   2,  -2,  -8, -11, -13, -15, -15, -18, -20, -19, -19, -18, -16, -14,  -9,  -9, -13, -16, -18, -19, -18, -18, -16, -20, -25, -30, -31, -38, -40, -41, -43, -45, -45, -46, -46, -45, -45, -45, -46, -46, -47, -49, -51, -53, -55, -58, -61, -64, -66, -69, -71, -73, -75, -77, -80, -84, -87, -89, -90, -92, -95, -96, -97, -97, -98, -98, -96, -93, -88, -89, -87, -82, -77, -73, -67, -63, -59, -54, -48, -43, -37, -31, -27, -21, -23, -15, -10,   4,   8,  12,  15,  18,  22,  25,  28,  31,  34,  38,  41,  43,  45,  50,  53,  54,  56,  61,  61,  61,  58,  58,  60,  60,  59,  58,  60,  60,  59,  63,  69,  69,  69,  69,  77,  78,  76,  77,  78,  77,  78,  78,  79,  79,  80,  79,  78,  77,  76,  71,  67,  62,  63,  63,  61,  59,  56,  54,  52,  50,  48,  45,  44,  42,  40,  39,  38,  37,  34,  33,  32,  30,  27,  26,  26,  25,  24,  23,
-  /*  -2.0 */  22,  21,  20,  19,  19,  19,  17,  17,  17,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  13,  12,  12,  11,  10,   9,   8,   6,   5,   4,   3,   1,  -0,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -19, -20, -20, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -14, -14, -13, -13, -13, -12, -11, -11, -10,  -9,  -8,  -7,  -5,  -4,  -2,   0,   3,   5,   6,  11,  18,  23,  23,  14,  16,  19,  20,  19,  17,  16,  15,  14,  10,   7,   5,   1,  -2,  -5,  -7,  -9, -12, -15, -16, -17, -19, -22, -22, -22, -23, -23, -24, -25, -25, -25, -26, -26, -22, -20, -19, -17, -16, -16, -13, -12, -11, -10,  -8,  -7,  -6,  -4,  -4,  -2,  -1,   1,   2,   4,   5,   6,   8,   8,  10,  12,  13,  14,  15,  17,  18,  20,  20,  20,  20,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  16,  15,  14,  12,  11,  10,   7,   5,   7,   7,   4,   2,  -3,  -7, -11, -15, -18, -20, -21, -21, -21, -20, -19, -17, -14,  -7,  -8, -12, -16, -18, -18, -17, -19, -15, -20, -25, -29, -31, -38, -41, -41, -44, -45, -47, -47, -47, -47, -46, -47, -48, -48, -49, -51, -53, -55, -57, -60, -63, -66, -69, -71, -72, -75, -77, -79, -83, -86, -89, -91, -92, -93, -97, -98, -99,-100,-101,-100, -98, -94, -92, -90, -87, -83, -78, -72, -68, -64, -59, -54, -47, -42, -36, -30, -26, -25, -17, -16,  -3,   5,   8,  12,  15,  19,  22,  26,  29,  33,  36,  39,  42,  45,  48,  51,  53,  51,  57,  64,  64,  61,  61,  61,  62,  64,  62,  59,  64,  68,  69,  71,  71,  70,  72,  72,  74,  75,  74,  71,  71,  73,  76,  78,  78,  78,  78,  76,  74,  73,  70,  66,  63,  62,  62,  61,  60,  57,  54,  51,  49,  48,  46,  44,  42,  41,  40,  38,  37,  35,  33,  32,  30,  27,  28,  27,  25,  24,  23,  22,
-  /*  -1.0 */  21,  20,  20,  19,  19,  17,  17,  17,  16,  16,  16,  15,  14,  16,  15,  14,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  15,  14,  14,  13,  12,  12,  11,  10,   9,   8,   7,   5,   4,   2,   1,  -0,  -2,  -3,  -5,  -6,  -7,  -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -23, -22, -22, -22, -21, -21, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -11, -11, -10, -10,  -6,  -4,  -4,  -3,  -2,  -1,   1,   4,   7,   9,  10,  16,  24,  23,  15,  17,  19,  20,  19,  17,  15,  14,  12,   8,   5,   2,  -1,  -3,  -6,  -8,  -9, -12, -15, -18, -20, -21, -24, -24, -23, -24, -23, -25, -25, -25, -25, -24, -22, -22, -23, -22, -20, -18, -16, -14, -12, -10,  -8,  -6,  -4,  -2,  -1,   1,   4,   5,   6,   6,   7,   7,   8,   8,   9,  10,  13,  15,  17,  18,  18,  19,  19,  20,  20,  20,  20,  20,  19,  19,  18,  18,  18,  18,  18,  18,  17,  18,  17,  17,  16,  16,  14,  14,  12,   9,   8,   8,   6,   4,   0,  -4,  -8, -13, -15, -19, -21, -21, -21, -21, -20, -18, -16, -12,  -7,  -8, -12, -14, -17, -17, -15, -15, -16, -20, -24, -28, -31, -34, -40, -42, -43, -45, -48, -49, -48, -49, -48, -48, -49, -50, -51, -53, -54, -56, -59, -62, -64, -67, -70, -72, -74, -77, -78, -81, -85, -88, -91, -94, -93, -95, -99, -99,-100,-101,-102,-101,-100, -97, -95, -92, -88, -84, -79, -74, -67, -62, -59, -54, -47, -41, -35, -29, -27, -23, -17, -12,  -0,   3,   8,  11,  15,  19,  22,  26,  30,  34,  37,  41,  45,  48,  50,  54,  54,  54,  55,  62,  61,  64,  61,  50,  44,  45,  55,  68,  71,  72,  74,  77,  79,  78,  75,  75,  72,  70,  69,  72,  73,  73,  73,  73,  73,  73,  72,  71,  69,  64,  62,  60,  60,  59,  60,  59,  58,  56,  53,  50,  48,  46,  44,  42,  41,  39,  39,  37,  35,  33,  32,  31,  28,  28,  28,  26,  24,  24,  22,  21,
-  /*   0.0 */  21,  20,  20,  19,  19,  18,  17,  16,  15,  15,  15,  15,  15,  15,  14,  15,  16,  16,  16,  16,  16,  17,  16,  16,  17,  16,  15,  14,  14,  13,  13,  12,  11,  10,   9,   8,   6,   5,   3,   2,   1,  -1,  -2,  -4,  -6,  -7,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -19, -18, -18, -17, -16, -16, -15, -14, -13, -13, -12, -11, -11, -10,  -9,  -8,  -6,  -4,  -4,  -3,  -2,  -0,   1,   3,   6,  10,   9,  14,  22,  25,  17,  18,  20,  21,  19,  19,  17,  14,  11,   7,   3,   0,  -2,  -5,  -7,  -8, -10, -13, -16, -19, -21, -23, -25, -26, -25, -24, -24, -26, -27, -26, -26, -25, -23, -25, -25, -23, -20, -19, -16, -14, -12, -10,  -8,  -7,  -4,  -2,   0,   2,   4,   6,   8,   9,  10,  10,  10,  11,  12,  13,  13,  15,  17,  18,  19,  19,  19,  19,  19,  19,  20,  19,  19,  19,  19,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  17,  16,  14,  12,   9,   9,   8,   6,   3,  -1,  -4,  -8, -11, -15, -17, -19, -20, -21, -21, -19, -17, -15, -12,  -7, -10, -12, -12, -14, -16, -16, -14, -12, -19, -23, -27, -30, -33, -35, -41, -43, -45, -48, -49, -50, -49, -49, -49, -50, -51, -52, -53, -55, -58, -60, -63, -66, -68, -71, -73, -75, -78, -80, -83, -86, -89, -92, -95, -95, -96,-100,-101,-102,-103,-103,-103,-102, -99, -94, -93, -89, -84, -79, -74, -69, -63, -58, -53, -47, -40, -34, -30, -29, -19, -13,  -7,  -2,   2,   6,  10,  14,  18,  22,  26,  30,  34,  37,  41,  45,  50,  54,  55,  55,  53,  54,  58,  61,  63,  56,  55,  51,  47,  69,  72,  74,  77,  76,  73,  74,  73,  72,  68,  68,  70,  71,  72,  72,  72,  72,  71,  69,  68,  66,  66,  62,  63,  61,  59,  58,  59,  59,  59,  56,  54,  52,  49,  47,  45,  44,  42,  41,  39,  38,  36,  34,  32,  31,  29,  28,  28,  25,  25,  23,  23,  22,  21,
-  /*   1.0 */  19,  20,  19,  19,  18,  17,  17,  16,  15,  15,  15,  14,  14,  14,  15,  15,  15,  16,  16,  16,  16,  17,  17,  17,  16,  16,  15,  15,  14,  13,  12,  11,  11,  10,   8,   7,   6,   5,   3,   1,  -0,  -2,  -4,  -5,  -7,  -8,  -9, -11, -12, -13, -15, -16, -17, -18, -19, -21, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -24, -24, -23, -22, -21, -21, -20, -19, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10,  -9,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   2,   3,   6,   8,  10,  12,  18,  28,  24,  19,  20,  22,  21,  20,  17,  14,  10,   6,   2,   1,  -1,  -6,  -8,  -9, -11, -14, -17, -20, -23, -25, -26, -28, -28, -27, -26, -27, -28, -27, -26, -26, -28, -27, -25, -22, -20, -18, -15, -13, -11,  -8,  -6,  -4,  -1,   1,   4,   5,   6,   7,   8,   9,  10,  10,  11,  12,  13,  13,  12,  12,  15,  16,  17,  17,  17,  18,  19,  19,  20,  20,  19,  19,  18,  18,  18,  18,  17,  17,  17,  16,  16,  16,  16,  15,  16,  14,  13,  11,  11,   9,   7,   4,  -0,  -3,  -6, -10, -13, -15, -18, -19, -19, -19, -18, -16, -14, -13, -11, -12, -13, -14, -14, -16, -12, -16, -14, -19, -24, -26, -29, -31, -33, -36, -42, -44, -47, -50, -51, -49, -50, -50, -51, -52, -53, -54, -56, -58, -61, -64, -66, -68, -71, -73, -76, -78, -81, -84, -88, -91, -94, -96, -96, -97,-100,-102,-103,-103,-103,-103,-102,-100, -96, -95, -91, -86, -80, -74, -68, -61, -58, -52, -47, -40, -35, -32, -26, -19, -12,  -7,  -3,   1,   4,   9,  13,  17,  21,  25,  29,  33,  37,  41,  45,  50,  55,  58,  58,  58,  56,  56,  64,  65,  63,  67,  68,  58,  65,  71,  72,  73,  74,  74,  74,  73,  71,  71,  71,  71,  71,  71,  71,  71,  70,  69,  68,  67,  66,  66,  62,  62,  59,  58,  57,  57,  57,  57,  55,  53,  50,  48,  46,  45,  43,  42,  40,  39,  37,  35,  33,  31,  31,  28,  29,  26,  26,  24,  23,  21,  20,  19,
-  /*   2.0 */  19,  19,  19,  18,  18,  17,  16,  15,  15,  14,  14,  14,  14,  14,  14,  15,  15,  16,  15,  16,  17,  17,  18,  18,  16,  15,  14,  14,  14,  13,  12,  11,  10,   9,   7,   6,   5,   4,   2,   0,  -1,  -3,  -4,  -6,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -21, -20, -19, -18, -18, -17, -16, -15, -14, -13, -12, -10, -10,  -9,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   3,   5,   7,   9,  11,  11,  13,  20,  26,  24,  20,  20,  20,  18,  14,  11,   8,   4,  -0,  -1,  -4,  -6,  -9, -10, -12, -16, -19, -22, -24, -26, -28, -29, -29, -29, -28, -29, -29, -28, -30, -32, -29, -27, -24, -22, -20, -17, -15, -13, -10,  -8,  -5,  -2,   0,   3,   5,   7,   7,   8,   9,  10,  10,  11,  11,  12,  12,  12,  13,  13,  14,  14,  15,  16,  18,  20,  20,  20,  19,  18,  18,  18,  19,  19,  18,  17,  17,  17,  17,  16,  16,  16,  15,  15,  16,  14,  13,  13,  12,   9,   7,   4,   0,  -1,  -3,  -7, -10, -14, -16, -18, -16, -16, -15, -14, -13, -13, -11, -11, -13, -14, -14, -16, -15, -17, -16, -20, -23, -25, -28, -30, -30, -33, -36, -40, -46, -50, -51, -50, -50, -51, -52, -53, -54, -55, -56, -58, -61, -63, -66, -68, -71, -74, -76, -79, -81, -85, -89, -92, -95, -97, -97, -99,-100,-102,-104,-104,-104,-104,-103,-102, -99, -95, -90, -85, -80, -73, -66, -61, -56, -51, -47, -43, -39, -32, -27, -21, -10,  -7,  -4,  -0,   4,   8,  12,  15,  20,  23,  26,  30,  34,  38,  41,  45,  53,  56,  58,  57,  54,  54,  59,  59,  60,  64,  70,  62,  56,  68,  69,  72,  74,  74,  74,  73,  72,  71,  70,  70,  70,  69,  70,  69,  68,  67,  66,  66,  65,  64,  62,  60,  57,  56,  56,  56,  56,  55,  54,  52,  50,  47,  46,  44,  42,  40,  39,  38,  36,  34,  32,  31,  30,  27,  28,  26,  25,  23,  21,  21,  20,  19,
-  /*   3.0 */  19,  18,  18,  17,  17,  16,  16,  15,  14,  14,  14,  14,  14,  14,  14,  15,  15,  16,  16,  17,  17,  18,  17,  17,  16,  15,  14,  14,  12,  11,  10,  10,   9,   8,   7,   5,   4,   3,   1,  -0,  -2,  -3,  -5,  -7,  -9, -10, -11, -13, -14, -16, -17, -18, -20, -21, -22, -23, -25, -25, -26, -27, -28, -28, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -12, -11, -10,  -9,  -8,  -7,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   4,   5,   7,  10,  12,  13,  11,  15,  24,  27,  18,  18,  16,  12,   9,   6,   3,   1,  -3,  -6,  -7,  -6, -10, -13, -14, -17, -20, -23, -26, -28, -29, -30, -30, -30, -31, -31, -29, -29, -31, -31, -29, -27, -25, -23, -21, -18, -15, -12, -10,  -7,  -4,  -2,   1,   4,   5,   6,   8,   8,   9,  10,  11,  11,  12,  13,  13,  15,  15,  15,  16,  17,  18,  18,  19,  20,  21,  20,  21,  20,  20,  20,  19,  18,  18,  18,  17,  17,  17,  16,  15,  14,  16,  17,  17,  16,  15,  15,  13,  11,   8,   6,   3,   1,  -0,  -3,  -7, -10, -13, -14, -13, -12, -12, -11, -12, -12, -11, -11, -13, -14, -13, -13, -15, -17, -18, -20, -21, -24, -27, -29, -30, -31, -35, -37, -41, -47, -50, -50, -52, -51, -53, -53, -54, -56, -57, -59, -61, -63, -66, -68, -71, -73, -76, -79, -82, -86, -90, -93, -95, -98, -96, -99,-101,-103,-104,-103,-104,-104,-104,-102, -99, -95, -91, -85, -80, -74, -67, -60, -55, -51, -49, -44, -37, -31, -29, -19, -12,  -9,  -5,  -1,   2,   5,   9,  13,  18,  21,  24,  28,  31,  35,  40,  45,  50,  54,  57,  55,  55,  57,  59,  62,  65,  68,  70,  67,  56,  62,  67,  73,  73,  74,  73,  72,  71,  70,  69,  69,  69,  68,  68,  68,  67,  66,  65,  64,  64,  63,  61,  57,  56,  54,  54,  55,  55,  54,  53,  50,  49,  47,  46,  43,  41,  40,  38,  36,  34,  32,  30,  30,  29,  26,  28,  25,  24,  22,  21,  20,  19,  19,
-  /*   4.0 */  17,  17,  16,  16,  17,  16,  15,  14,  14,  14,  13,  13,  14,  13,  14,  14,  15,  16,  17,  16,  17,  17,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   7,   6,   5,   4,   3,   2,   0,  -1,  -3,  -4,  -6,  -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -22, -23, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -27, -27, -26, -25, -24, -23, -21, -20, -19, -18, -17, -16, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -5,  -4,  -3,  -2,  -0,   1,   3,   4,   5,   7,   9,  10,  13,  14,  13,  10,  17,  27,  18,  19,  10,   6,   4,   2,  -1,  -3,  -6,  -7,  -8,  -9, -12, -14, -15, -18, -22, -24, -27, -31, -33, -33, -32, -33, -34, -32, -29, -30, -31, -32, -30, -28, -26, -23, -21, -18, -15, -13, -10,  -7,  -4,  -1,   2,   4,   5,   6,   8,   9,  10,  10,  12,  12,  13,  14,  15,  16,  16,  17,  17,  18,  19,  19,  20,  21,  22,  22,  24,  25,  24,  23,  22,  21,  20,  20,  19,  18,  17,  16,  15,  17,  19,  21,  19,  18,  20,  16,  15,  14,  12,  10,   8,   5,   3,  -3,  -6,  -8,  -9, -10, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -12, -11, -14, -16, -17, -16, -18, -22, -26, -30, -30, -31, -34, -37, -39, -43, -47, -49, -53, -54, -52, -53, -54, -55, -57, -59, -61, -63, -65, -67, -70, -73, -77, -80, -83, -87, -90, -93, -96, -98, -96,-100,-101,-103,-104,-104,-106,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -55, -51, -51, -44, -43, -33, -22, -20, -15, -11,  -7,  -2,   1,   3,   6,  10,  15,  19,  22,  25,  29,  33,  37,  42,  47,  52,  56,  55,  57,  59,  61,  63,  66,  68,  69,  70,  62,  65,  66,  71,  72,  72,  72,  71,  70,  69,  68,  67,  67,  67,  67,  67,  66,  65,  64,  63,  62,  62,  59,  57,  55,  53,  53,  54,  54,  52,  53,  49,  48,  47,  45,  41,  41,  38,  36,  34,  33,  31,  30,  28,  28,  25,  26,  24,  23,  21,  19,  19,  18,  17,
-  /*   5.0 */  16,  16,  16,  16,  16,  15,  13,  13,  13,  13,  12,  12,  13,  13,  14,  14,  15,  16,  16,  17,  16,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   8,   6,   5,   4,   3,   1,  -0,  -1,  -3,  -4,  -6,  -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -31, -31, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -21, -19, -18, -17, -15, -14, -13, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   4,   6,   6,   8,   9,  10,  12,  13,  14,  12,  16,  27,  23,  22,  13,   3,  -0,  -2,  -5,  -6,  -5,  -8,  -9, -10, -15, -13, -14, -19, -24, -25, -27, -33, -34, -33, -34, -34, -34, -36, -35, -35, -34, -33, -31, -29, -26, -24, -21, -18, -16, -13, -10,  -7,  -4,  -1,   2,   4,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  17,  17,  17,  17,  18,  19,  20,  20,  21,  23,  23,  27,  30,  30,  29,  27,  26,  24,  25,  24,  22,  20,  20,  17,  16,  18,  21,  19,  19,  20,  21,  20,  18,  16,  14,  12,   9,   6,   4,  -1,  -5,  -8,  -8,  -7,  -9,  -9, -10, -11, -12, -11, -11, -11, -12, -13, -13, -13, -13, -15, -14, -15, -17, -21, -24, -29, -30, -31, -34, -36, -39, -41, -46, -49, -53, -54, -54, -53, -54, -55, -56, -57, -60, -62, -64, -66, -70, -74, -78, -81, -84, -88, -91, -94, -96, -97, -96,-100,-101,-102,-103,-105,-107,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -54, -52, -50, -49, -42, -29, -26, -21, -17, -13,  -8,  -3,  -1,   0,   3,   8,  12,  17,  20,  23,  27,  31,  34,  39,  44,  49,  54,  57,  59,  62,  62,  64,  66,  67,  64,  65,  53,  56,  68,  70,  69,  70,  71,  69,  68,  68,  67,  67,  66,  66,  65,  66,  65,  64,  63,  62,  61,  61,  59,  55,  54,  53,  52,  54,  52,  51,  51,  49,  47,  45,  43,  40,  40,  36,  34,  33,  30,  30,  29,  28,  27,  25,  24,  23,  22,  21,  18,  18,  17,  16,
-  /*   6.0 */  16,  16,  16,  16,  15,  13,  12,  11,  12,  12,  12,  12,  13,  13,  14,  14,  15,  15,  16,  17,  16,  16,  15,  14,  13,  13,  12,  11,  10,   8,   7,   6,   5,   4,   3,   1,   0,  -1,  -3,  -5,  -6,  -8, -10, -11, -13, -15, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -31, -31, -30, -29, -28, -26, -25, -24, -23, -21, -20, -18, -17, -15, -14, -12, -11, -10,  -9,  -8,  -6,  -5,  -4,  -3,  -2,  -1,   1,   3,   4,   6,   8,   9,  10,  13,  13,  14,  14,  12,  19,  26,  20,  13,  20,   6,  -3,  -5,  -7, -10,  -8,  -6,  -7, -13, -17, -16, -19, -23, -26, -27, -28, -32, -32, -32, -33, -33, -36, -38, -38, -38, -36, -34, -32, -30, -27, -24, -22, -19, -16, -13, -10,  -7,  -4,  -1,   2,   4,   5,   7,   8,   9,  10,  11,  12,  13,  15,  16,  17,  18,  18,  18,  19,  20,  21,  22,  23,  25,  28,  30,  31,  31,  29,  29,  27,  27,  28,  27,  27,  26,  25,  21,  19,  19,  20,  19,  20,  21,  22,  23,  20,  18,  15,  12,  10,   8,   5,   1,  -3,  -6,  -6,  -6,  -7,  -8,  -9, -11, -11, -10, -10, -11, -12, -13, -13, -13, -13, -13, -13, -13, -14, -18, -23, -26, -29, -30, -32, -34, -37, -40, -42, -49, -52, -53, -55, -54, -54, -54, -55, -57, -58, -60, -62, -66, -70, -74, -78, -82, -85, -88, -91, -94, -96, -97, -97,-100,-101,-102,-102,-104,-105,-100, -98,-100, -98, -95, -90, -85, -79, -73, -67, -60, -55, -55, -54, -52, -40, -34, -30, -23, -19, -15, -10,  -7,  -5,  -3,   0,   6,  10,  14,  17,  21,  24,  28,  31,  35,  42,  47,  53,  53,  56,  60,  67,  65,  66,  67,  70,  64,  45,  60,  68,  68,  67,  67,  69,  66,  66,  67,  66,  66,  65,  64,  64,  64,  64,  63,  63,  61,  60,  59,  58,  57,  53,  53,  52,  52,  50,  49,  50,  48,  45,  43,  41,  38,  36,  35,  32,  31,  29,  29,  28,  28,  25,  27,  24,  23,  21,  21,  18,  18,  16,  16,
-  /*   7.0 */  16,  15,  15,  15,  14,  11,  11,  11,  11,  11,  11,  12,  12,  13,  13,  14,  14,  14,  15,  15,  15,  15,  14,  13,  12,  11,  10,   9,   8,   7,   6,   5,   4,   3,   1,  -0,  -1,  -3,  -5,  -6,  -8, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -33, -34, -33, -34, -33, -33, -32, -31, -30, -29, -27, -26, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -8,  -7,  -6,  -5,  -3,  -2,  -1,   0,   1,   3,   5,   6,   8,  11,  11,  12,  12,  12,  12,  14,  17,  22,  14,   4,  11,   3,  -5,  -7,  -8, -10, -12, -10, -12, -16, -21, -24, -26, -27, -29, -30, -31, -32, -33, -33, -34, -39, -40, -40, -40, -39, -38, -35, -32, -30, -28, -25, -22, -19, -16, -13, -10,  -7,  -4,  -1,   1,   3,   4,   6,   7,   9,  10,  12,  13,  14,  15,  17,  17,  18,  19,  19,  20,  21,  22,  23,  27,  31,  31,  31,  32,  31,  30,  30,  28,  28,  28,  28,  27,  26,  27,  26,  25,  24,  23,  22,  22,  22,  21,  20,  20,  19,  17,  15,  12,   8,   6,   3,  -0,  -2,  -3,  -3,  -5,  -6,  -9,  -9,  -8,  -8, -10, -11, -11, -12, -13, -12, -12, -11, -11, -11, -11, -14, -19, -23, -25, -26, -28, -31, -33, -36, -39, -44, -51, -53, -54, -56, -54, -53, -54, -56, -57, -59, -62, -66, -70, -74, -78, -82, -85, -89, -91, -94, -96, -97, -97,-100,-100,-101,-101,-103,-103, -97, -93, -95, -96, -94, -90, -85, -79, -74, -67, -60, -56, -58, -59, -50, -42, -35, -31, -25, -21, -17, -14, -12,  -9,  -5,  -2,   3,   7,  11,  15,  18,  22,  26,  31,  33,  36,  44,  48,  52,  53,  55,  59,  67,  66,  69,  71,  62,  51,  62,  67,  67,  66,  66,  67,  68,  63,  63,  61,  64,  64,  63,  63,  63,  63,  62,  61,  60,  59,  58,  58,  53,  52,  55,  52,  50,  50,  48,  46,  49,  43,  41,  39,  37,  35,  33,  32,  30,  28,  26,  27,  26,  26,  26,  23,  22,  21,  19,  18,  17,  16,  16,
-  /*   8.0 */  15,  14,  13,  13,  12,  10,  10,  10,  11,  11,  11,  12,  12,  13,  13,  13,  15,  14,  14,  13,  14,  13,  12,  11,  10,   9,   8,   7,   6,   6,   5,   4,   2,   1,  -0,  -1,  -3,  -4,  -6,  -8,  -9, -11, -13, -14, -16, -18, -19, -22, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -35, -35, -35, -35, -35, -35, -34, -33, -32, -31, -29, -28, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -8,  -6,  -5,  -4,  -3,  -2,  -0,   1,   2,   4,   5,   7,   9,  11,  12,  14,  15,  15,  15,  15,  12,   9,   4,   2,   4,   0,  -5,  -9, -10, -11, -13, -14, -18, -21, -25, -27, -29, -30, -31, -33, -35, -37, -38, -37, -39, -43, -43, -42, -42, -40, -37, -35, -32, -30, -28, -25, -21, -18, -15, -12, -10,  -7,  -5,  -3,  -2,  -0,   2,   4,   6,   7,   9,  10,  12,  13,  15,  17,  19,  19,  19,  20,  21,  23,  24,  31,  33,  30,  32,  34,  35,  34,  31,  30,  29,  27,  28,  27,  26,  26,  26,  26,  26,  25,  25,  24,  24,  22,  21,  20,  19,  18,  16,  14,  12,   9,   6,   4,   2,  -1,  -1,  -2,  -3,  -5,  -5,  -6,  -7,  -7,  -9, -10, -10, -11, -12, -12, -10,  -8,  -8,  -9, -11, -12, -16, -19, -21, -22, -25, -28, -29, -31, -34, -39, -47, -52, -53, -54, -55, -52, -53, -54, -55, -58, -62, -66, -70, -74, -78, -81, -85, -88, -91, -93, -95, -96, -97, -99,-100,-100, -97, -99,-100, -96, -94, -95, -95, -92, -88, -84, -78, -73, -67, -62, -58, -58, -60, -49, -43, -36, -32, -27, -23, -19, -17, -14, -11,  -7,  -3,  -0,   4,   8,  13,  16,  20,  25,  29,  33,  36,  38,  46,  50,  52,  54,  56,  60,  67,  71,  71,  65,  55,  61,  65,  64,  64,  64,  64,  64,  63,  63,  65,  58,  63,  63,  62,  61,  62,  59,  60,  60,  59,  59,  58,  52,  50,  52,  49,  48,  49,  46,  44,  42,  41,  39,  37,  35,  33,  31,  30,  29,  28,  28,  27,  25,  26,  23,  22,  22,  20,  19,  18,  16,  16,  15,
-  /*   9.0 */  14,  13,  13,  12,  11,  10,  10,  10,  11,  11,  11,  12,  12,  13,  13,  13,  13,  14,  13,  13,  12,  12,  11,  10,   9,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -3,  -4,  -6,  -7,  -9, -11, -12, -14, -15, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -32, -30, -29, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -8,  -6,  -5,  -3,  -2,  -1,   0,   1,   3,   4,   6,   6,   7,  10,  15,  13,  11,  12,  14,  10,   1,   2,  -2,  -2,  -2, -11,  -5,  -8, -12, -13, -15, -18, -23, -29, -33, -35, -34, -33, -36, -40, -40, -42, -44, -42, -44, -44, -43, -42, -41, -39, -37, -35, -33, -30, -26, -23, -20, -16, -14, -12, -10,  -8,  -6,  -4,  -3,  -1,   1,   3,   5,   7,   8,  10,  12,  13,  15,  16,  19,  20,  19,  21,  23,  25,  29,  32,  32,  30,  33,  34,  35,  34,  31,  29,  28,  27,  27,  26,  25,  24,  24,  25,  25,  24,  24,  25,  25,  23,  23,  21,  19,  19,  16,  14,  12,   9,   6,   4,   1,  -1,  -1,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -9, -10,  -8,  -4,  -7,  -7,  -7,  -8, -12, -12, -14, -17, -18, -22, -25, -27, -28, -30, -34, -42, -49, -51, -52, -53, -51, -51, -53, -55, -58, -62, -66, -70, -74, -77, -80, -84, -87, -90, -92, -94, -95, -96, -98, -99, -96, -96, -97, -97, -96, -95, -98, -95, -92, -88, -84, -78, -73, -67, -62, -61, -59, -61, -51, -44, -39, -34, -29, -25, -22, -20, -17, -13,  -9,  -6,  -3,   2,   6,  10,  13,  18,  23,  26,  31,  35,  38,  42,  49,  49,  54,  55,  53,  60,  64,  68,  68,  51,  60,  62,  62,  61,  61,  62,  61,  62,  62,  62,  59,  61,  60,  61,  60,  57,  55,  56,  56,  54,  54,  51,  56,  47,  51,  46,  43,  43,  43,  42,  40,  38,  35,  35,  34,  32,  30,  29,  30,  29,  28,  25,  28,  26,  22,  22,  20,  19,  18,  18,  16,  15,  14,
-  /*  10.0 */  13,  12,  12,  11,  10,  10,  10,  10,  11,  12,  12,  12,  12,  13,  13,  15,  13,  13,  12,  11,  10,  10,   9,   8,   7,   6,   5,   5,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -5,  -7,  -8, -10, -11, -13, -15, -17, -19, -21, -23, -24, -26, -28, -29, -31, -32, -34, -35, -36, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -36, -34, -33, -31, -29, -27, -26, -24, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -7,  -6,  -5,  -3,  -2,  -1,   0,   1,   3,   4,   4,   6,  10,  14,   9,   6,   3,   1,   1,  -2,  -4,  -3,  -5,  -4,  -1, -13, -14, -11, -13, -16, -17, -23, -28, -32, -40, -45, -43, -42, -41, -42, -44, -46, -45, -45, -45, -45, -44, -43, -41, -39, -37, -35, -32, -29, -26, -22, -19, -16, -15, -13, -11,  -9,  -7,  -5,  -3,  -1,   1,   3,   5,   6,   8,  10,  11,  13,  14,  16,  16,  17,  19,  21,  25,  29,  30,  31,  33,  32,  33,  33,  32,  32,  30,  28,  28,  27,  26,  25,  24,  23,  22,  24,  24,  23,  23,  24,  25,  24,  24,  22,  19,  18,  17,  15,  13,  10,   8,   6,   4,   2,   0,  -0,  -0,  -0,  -1,  -2,  -3,  -5,  -6,  -5,  -6,  -7,  -8,  -4,  -4,  -5,  -6,  -7,  -8, -10, -12, -13, -15, -18, -20, -23, -25, -26, -28, -32, -37, -44, -48, -50, -51, -50, -50, -51, -54, -58, -62, -66, -70, -72, -76, -79, -83, -85, -88, -91, -93, -94, -95, -97, -97, -95, -95, -95, -95, -96, -98, -97, -95, -91, -88, -84, -79, -74, -68, -63, -63, -61, -64, -53, -46, -42, -36, -32, -28, -25, -23, -19, -16, -12,  -9,  -5,  -1,   3,   8,  11,  15,  19,  24,  29,  32,  37,  40,  45,  50,  52,  56,  54,  62,  65,  65,  64,  50,  59,  60,  59,  59,  58,  58,  59,  60,  60,  60,  60,  55,  61,  56,  54,  52,  53,  55,  53,  51,  51,  46,  45,  44,  44,  42,  41,  41,  40,  39,  38,  36,  35,  36,  33,  32,  30,  28,  28,  26,  25,  26,  25,  23,  22,  21,  20,  19,  18,  16,  15,  14,  13,
-  /*  11.0 */  12,  11,  11,  11,  11,  11,  11,  10,  11,  10,  12,  12,  12,  13,  13,  13,  13,  12,  11,  10,   9,   8,   8,   6,   6,   5,   4,   3,   2,   0,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -11, -12, -15, -16, -18, -20, -22, -24, -26, -28, -29, -31, -32, -34, -35, -37, -38, -39, -40, -40, -41, -41, -41, -41, -40, -39, -38, -37, -35, -34, -32, -30, -28, -26, -24, -22, -20, -18, -16, -14, -13, -11, -10,  -9,  -7,  -6,  -5,  -3,  -2,  -0,   1,   2,   3,   1,  -1,   6,   8,   9,   6,   3,   1,  -1,  -2,  -4,  -6,  -9,  -9,   0,  -5, -13, -17, -17, -17, -22, -23, -26, -30, -30, -33, -39, -42, -46, -45, -45, -47, -47, -46, -45, -45, -45, -44, -43, -41, -39, -37, -35, -31, -27, -25, -22, -20, -18, -17, -15, -13, -11,  -8,  -6,  -4,  -2,   0,   2,   4,   7,   9,  10,  12,  14,  15,  16,  16,  17,  19,  20,  26,  28,  29,  31,  32,  35,  34,  32,  32,  31,  29,  29,  29,  28,  26,  25,  24,  23,  23,  22,  23,  22,  21,  22,  22,  22,  22,  21,  19,  18,  16,  15,  13,  11,  10,   8,   6,   4,   3,   3,   2,   2,   0,  -1,  -2,  -3,  -3,  -2,  -3,  -5,  -5,  -4,  -5,  -5,  -3,  -6,  -7,  -9, -11, -12, -13, -17, -20, -21, -24, -25, -28, -28, -33, -40, -44, -47, -48, -48, -49, -52, -54, -58, -62, -65, -68, -71, -75, -78, -81, -84, -87, -90, -91, -92, -93, -95, -94, -92, -94, -94, -93, -93, -99, -96, -93, -90, -88, -84, -79, -74, -68, -64, -63, -61, -63, -53, -48, -44, -38, -34, -30, -28, -25, -22, -18, -15, -12,  -8,  -3,   1,   6,   9,  12,  16,  20,  25,  30,  35,  39,  42,  48,  52,  54,  55,  60,  62,  65,  55,  52,  57,  58,  57,  56,  56,  56,  56,  58,  58,  58,  59,  50,  51,  43,  38,  41,  46,  51,  50,  50,  47,  46,  44,  43,  42,  41,  40,  39,  37,  39,  36,  34,  34,  33,  32,  29,  29,  27,  27,  28,  26,  23,  25,  22,  21,  20,  19,  17,  16,  15,  14,  13,  12,
-  /*  12.0 */  11,  10,  11,  11,  11,  11,  10,  11,  11,  10,  11,  12,  12,  12,  12,  12,  11,  10,  10,   9,   8,   8,   6,   5,   5,   4,   3,   2,   0,  -1,  -2,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -15, -18, -19, -21, -23, -25, -27, -29, -31, -32, -34, -35, -37, -38, -39, -40, -41, -42, -42, -42, -42, -42, -41, -40, -39, -38, -36, -35, -33, -31, -29, -27, -25, -22, -20, -18, -16, -14, -12, -10,  -9,  -8,  -7,  -6,  -5,  -3,  -2,  -1,  -0,  -2,  -3,  -2,  -0,   6,   9,   7,   6,   3,   3,   0,  -2,  -4,  -6, -10, -16, -20, -18, -16, -22, -23, -25, -26, -30, -34, -36, -32, -38, -38, -43, -49, -49, -45, -48, -47, -46, -45, -45, -44, -43, -42, -41, -38, -35, -32, -29, -26, -24, -22, -20, -19, -17, -15, -13, -11,  -9,  -6,  -4,  -2,   1,   3,   6,   8,  10,  12,  14,  15,  15,  16,  18,  19,  20,  21,  27,  28,  29,  30,  30,  33,  33,  33,  32,  31,  29,  29,  29,  28,  27,  26,  25,  24,  24,  22,  22,  20,  20,  21,  21,  22,  21,  21,  19,  17,  16,  14,  13,  12,  11,   8,   7,   5,   5,   5,   5,   4,   3,   1,  -0,  -0,  -0,  -1,  -1,  -3,  -4,  -5,  -5,  -4,  -2,  -2,  -3,  -8,  -9, -10, -12, -15, -17, -19, -21, -23, -26, -28, -30, -34, -37, -41, -43, -45, -46, -51, -54, -57, -60, -63, -67, -70, -73, -76, -79, -82, -85, -88, -89, -90, -92, -93, -91, -90, -89, -91, -91, -93, -96, -95, -92, -89, -87, -83, -79, -74, -69, -64, -63, -62, -62, -54, -49, -46, -39, -36, -32, -29, -27, -24, -20, -17, -14, -10,  -5,   1,   4,   6,   9,  13,  18,  22,  27,  31,  36,  38,  43,  49,  51,  52,  55,  58,  60,  47,  52,  55,  55,  55,  54,  54,  54,  54,  55,  56,  56,  56,  54,  53,  48,  46,  48,  38,  35,  42,  47,  47,  46,  45,  43,  41,  40,  39,  38,  36,  34,  33,  33,  32,  30,  31,  28,  27,  30,  26,  26,  23,  23,  22,  20,  19,  18,  17,  16,  14,  14,  13,  12,  11,
-  /*  13.0 */  10,  10,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  12,  12,  12,  11,  11,  10,   8,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -9, -10, -11, -13, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -34, -35, -37, -38, -39, -41, -42, -43, -43, -43, -43, -43, -43, -42, -41, -40, -39, -37, -35, -33, -31, -30, -28, -25, -23, -20, -18, -16, -14, -12, -11,  -9,  -8,  -7,  -6,  -5,  -4,  -4,  -6,  -5,  -3,  -1,  -0,   4,   7,   7,   6,   5,   2,   0,  -2,  -4,  -6,  -8, -11, -17, -22, -24, -26, -26, -30, -35, -38, -40, -40, -37, -35, -38, -42, -39, -48, -48, -46, -47, -46, -46, -45, -44, -44, -43, -41, -40, -37, -34, -31, -27, -25, -24, -22, -20, -18, -17, -15, -13, -11,  -9,  -6,  -3,  -1,   2,   4,   7,   9,  11,  13,  14,  16,  16,  17,  19,  20,  21,  23,  29,  30,  31,  31,  31,  31,  31,  32,  33,  31,  29,  28,  28,  28,  27,  26,  26,  25,  24,  23,  22,  21,  20,  19,  20,  21,  21,  20,  19,  17,  15,  14,  13,  12,  11,  10,   8,   7,   6,   7,   7,   8,   6,   4,   2,   2,   2,   1,  -1,  -2,  -2,  -4,  -4,  -3,  -3,  -1,  -2,  -5,  -8,  -9, -11, -11, -15, -18, -19, -21, -23, -26, -28, -31, -34, -37, -40, -42, -44, -47, -52, -57, -59, -62, -65, -68, -71, -74, -77, -80, -83, -86, -87, -88, -89, -89, -91, -88, -86, -87, -89, -92, -93, -92, -90, -87, -86, -82, -78, -73, -69, -65, -62, -62, -61, -57, -50, -47, -41, -38, -34, -32, -29, -25, -22, -20, -16, -12,  -7,  -2,   1,   3,   6,  11,  15,  19,  24,  28,  32,  36,  38,  38,  47,  50,  51,  53,  46,  45,  51,  53,  53,  52,  52,  52,  52,  52,  54,  54,  55,  55,  54,  53,  52,  53,  54,  53,  46,  32,  40,  47,  46,  44,  42,  41,  39,  38,  36,  34,  35,  32,  31,  30,  30,  29,  28,  26,  26,  24,  22,  21,  20,  20,  18,  17,  16,  15,  14,  14,  13,  12,  12,  10,
-  /*  14.0 */   9,  10,  10,  10,   9,   9,   9,   9,   9,   9,  10,  11,  11,  11,  11,  10,  10,   9,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -8, -10, -11, -12, -14, -15, -17, -19, -21, -23, -25, -27, -29, -32, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -44, -44, -44, -43, -42, -41, -39, -37, -36, -34, -32, -30, -28, -25, -23, -21, -18, -16, -14, -13, -11,  -9,  -8,  -7,  -6,  -6,  -9,  -7,  -4,  -3,   0,   3,   4,   5,   6,   6,   3,   2,   1,  -1,  -3,  -6,  -8, -12, -15, -18, -21, -23, -25, -29, -33, -35, -36, -37, -37, -37, -37, -38, -41, -39, -47, -53, -49, -48, -48, -47, -46, -44, -43, -42, -41, -38, -35, -32, -29, -26, -25, -23, -21, -20, -18, -16, -14, -11,  -9,  -7,  -5,  -2,   0,   3,   6,   8,  10,  13,  15,  17,  18,  18,  19,  20,  21,  24,  26,  29,  30,  30,  31,  32,  30,  31,  31,  31,  30,  29,  29,  28,  29,  27,  25,  25,  24,  23,  23,  22,  21,  20,  19,  19,  20,  20,  20,  19,  17,  15,  14,  14,  13,  11,  10,   9,   8,   8,  10,   9,   9,   7,   5,   4,   4,   3,   2,   1,  -0,  -1,  -2,  -2,  -3,  -5,  -5,  -2,  -4,  -6,  -8, -10,  -8, -10, -14, -17, -19, -22, -24, -26, -29, -31, -34, -36, -39, -41, -45, -51, -54, -58, -60, -63, -66, -69, -72, -75, -78, -81, -83, -84, -86, -87, -86, -88, -86, -85, -87, -89, -90, -92, -91, -88, -86, -86, -80, -77, -73, -69, -65, -62, -62, -60, -59, -51, -46, -42, -38, -35, -33, -30, -27, -24, -21, -18, -14,  -9,  -4,  -2,  -0,   3,   8,  12,  17,  21,  26,  30,  34,  34,  36,  44,  48,  50,  52,  44,  46,  50,  50,  50,  50,  50,  50,  50,  51,  52,  52,  53,  53,  53,  53,  53,  53,  54,  55,  55,  43,  32,  43,  44,  43,  42,  40,  38,  37,  34,  36,  34,  31,  30,  29,  30,  27,  26,  27,  24,  24,  24,  22,  19,  18,  17,  16,  14,  14,  14,  14,  12,  11,   9,   9,
-  /*  15.0 */   9,   9,   8,   9,   8,   8,   8,   8,   8,   9,   8,  10,  10,  11,  10,  10,   9,   8,   7,   6,   5,   4,   3,   3,   2,   1,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -24, -26, -28, -31, -33, -35, -36, -38, -39, -40, -41, -42, -44, -44, -45, -45, -45, -45, -44, -44, -42, -41, -39, -38, -36, -34, -32, -31, -29, -26, -23, -21, -19, -17, -15, -13, -11, -10,  -9,  -9,  -9, -10,  -5,  -5,   1,   4,   2,   2,   2,   4,   4,   3,   1,  -1,  -1,  -3,  -6,  -8, -10, -14, -15, -18, -21, -21, -24, -28, -30, -32, -35, -37, -38, -40, -39, -40, -42, -40, -55, -56, -49, -50, -49, -49, -47, -44, -43, -41, -38, -36, -33, -31, -28, -26, -25, -23, -21, -19, -17, -15, -13, -10,  -8,  -5,  -3,  -0,   3,   5,   8,  10,  13,  15,  18,  20,  25,  25,  21,  22,  23,  25,  28,  30,  29,  31,  32,  33,  29,  30,  30,  30,  29,  28,  28,  28,  29,  28,  26,  24,  22,  22,  23,  22,  21,  21,  20,  19,  19,  20,  20,  19,  17,  15,  15,  14,  13,  12,  10,  10,  10,   9,  11,  11,  10,   9,   7,   7,   6,   5,   4,   3,   2,   0,   0,   0,  -1,  -3,  -3,   1,  -4,  -6,  -7,  -9,  -5,  -8, -12, -15, -16, -18, -21, -24, -27, -29, -32, -34, -37, -40, -45, -50, -54, -57, -58, -61, -64, -67, -70, -73, -76, -79, -81, -82, -84, -83, -84, -83, -84, -85, -87, -88, -87, -88, -89, -87, -84, -83, -79, -76, -72, -69, -64, -61, -60, -62, -56, -50, -47, -43, -39, -36, -34, -31, -29, -27, -24, -21, -17, -12,  -7,  -5,  -3,   2,   6,   9,  14,  18,  23,  27,  31,  32,  41,  43,  41,  42,  44,  42,  45,  47,  47,  48,  48,  48,  48,  49,  49,  50,  51,  51,  52,  52,  52,  52,  52,  54,  55,  55,  50,  37,  40,  43,  44,  42,  40,  38,  36,  35,  31,  30,  29,  29,  29,  28,  25,  26,  24,  23,  22,  19,  18,  19,  16,  15,  14,  13,  13,  12,  12,  11,  10,   9,   9,
-  /*  16.0 */   7,   7,   8,   8,   8,   8,   8,   8,   8,   9,  10,  10,  10,   9,  10,   9,   8,   8,   7,   6,   5,   4,   4,   4,   3,   1,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -8, -10, -11, -13, -14, -16, -17, -19, -21, -22, -24, -26, -27, -29, -32, -34, -35, -37, -39, -40, -41, -42, -43, -44, -45, -45, -46, -46, -45, -45, -44, -43, -42, -40, -38, -36, -34, -33, -31, -29, -26, -24, -21, -19, -17, -15, -15, -14, -12,  -8,  -3,  -3,  -8,  -6,  -2,  -2,  -3,  -2,  -1,  -3,  -2,  -0,  -1,  -2,  -2,  -4,  -5,  -7, -10, -13, -15, -17, -19, -23, -25, -27, -29, -31, -34, -37, -39, -41, -42, -42, -41, -41, -42, -61, -55, -49, -46, -46, -47, -46, -44, -42, -40, -38, -34, -32, -29, -27, -25, -24, -22, -20, -18, -16, -14, -11,  -8,  -5,  -3,  -1,   3,   5,   8,  10,  13,  15,  17,  19,  21,  23,  31,  25,  24,  25,  26,  27,  30,  30,  32,  33,  32,  28,  28,  29,  29,  28,  28,  28,  28,  29,  29,  28,  27,  24,  23,  24,  23,  21,  22,  21,  21,  21,  21,  21,  19,  17,  17,  15,  14,  13,  12,  11,  10,  11,  11,  11,  12,  11,  10,   9,   8,   7,   6,   5,   5,   3,   2,   2,   1,   0,   0,   1,  -1,  -3,  -4,  -5,  -6,  -5,  -9, -12, -15, -17, -19, -21, -23, -26, -29, -31, -33, -36, -40, -44, -47, -52, -56, -56, -59, -62, -65, -67, -70, -74, -75, -78, -80, -80, -80, -80, -80, -81, -83, -85, -85, -83, -81, -82, -84, -83, -81, -78, -75, -72, -68, -64, -61, -60, -61, -56, -51, -47, -44, -40, -37, -35, -32, -31, -30, -27, -23, -19, -14, -12,  -9,  -6,  -1,   4,   7,  13,  16,  20,  24,  29,  31,  41,  43,  38,  33,  41,  44,  45,  45,  45,  45,  46,  46,  46,  46,  47,  49,  49,  50,  51,  51,  51,  52,  52,  53,  54,  54,  53,  40,  36,  43,  42,  41,  41,  37,  35,  36,  31,  30,  29,  28,  28,  25,  24,  26,  23,  22,  20,  20,  18,  17,  16,  15,  13,  12,  12,  11,  11,  10,   9,   8,   7,
-  /*  17.0 */   7,   7,   6,   7,   7,   8,   8,   8,   9,   9,  10,  10,  10,   9,   9,   8,   8,   7,   6,   6,   6,   5,   5,   5,   4,   2,   0,  -1,  -3,  -4,  -5,  -7,  -8,  -9, -10, -12, -14, -15, -17, -19, -21, -22, -23, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -45, -45, -46, -46, -46, -46, -45, -44, -44, -42, -40, -39, -37, -35, -33, -31, -30, -27, -24, -22, -20, -20, -19, -14,  -8,  -5,  -3,  -2,  -6,  -9,  -7,  -5,  -5,  -6,  -5,  -4,  -5,  -9,  -9,  -8,  -6,  -6,  -7,  -8, -10, -12, -14, -17, -19, -21, -25, -29, -30, -33, -38, -41, -43, -44, -45, -45, -43, -42, -41, -56, -62, -53, -49, -49, -48, -47, -44, -42, -41, -39, -36, -34, -31, -28, -25, -24, -22, -21, -19, -17, -15, -13, -10,  -7,  -4,  -1,   2,   5,   8,  10,  13,  15,  16,  18,  21,  29,  25,  27,  25,  25,  26,  27,  27,  30,  32,  32,  34,  30,  27,  27,  28,  28,  28,  28,  28,  27,  28,  29,  28,  28,  27,  26,  25,  24,  22,  23,  22,  22,  22,  24,  23,  21,  20,  19,  17,  15,  14,  13,  11,  10,  11,  11,  12,  13,  12,  11,  10,  10,   8,   8,   7,   5,   4,   4,   3,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -4,  -4,  -8, -12, -16, -20, -22, -23, -24, -25, -28, -32, -34, -36, -39, -42, -44, -50, -55, -55, -56, -59, -62, -64, -69, -71, -72, -75, -77, -76, -77, -78, -77, -78, -79, -79, -80, -80, -77, -75, -78, -80, -80, -77, -73, -71, -67, -63, -61, -60, -60, -58, -51, -48, -44, -41, -38, -37, -33, -32, -30, -27, -25, -20, -17, -15, -11,  -8,  -5,   1,   4,   8,  12,  16,  21,  25,  28,  34,  43,  41,  33,  40,  43,  42,  42,  43,  43,  44,  44,  44,  44,  45,  47,  48,  49,  50,  50,  51,  51,  51,  52,  53,  52,  49,  38,  31,  40,  44,  40,  41,  37,  37,  32,  31,  30,  28,  27,  26,  24,  23,  24,  21,  20,  19,  18,  17,  16,  14,  13,  12,  11,  11,  10,   9,   9,   8,   7,   7,
-  /*  18.0 */   6,   6,   6,   7,   8,   9,   9,   8,   9,   9,   9,  10,   9,   9,   8,   8,   8,   7,   7,   7,   7,   7,   7,   6,   3,   1,  -1,  -2,  -3,  -5,  -6,  -7,  -8, -10, -11, -13, -15, -16, -18, -20, -22, -23, -25, -26, -28, -30, -32, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -46, -47, -47, -46, -46, -45, -44, -42, -41, -39, -37, -35, -33, -32, -30, -28, -25, -23, -23, -18, -14,  -9,  -7,  -6,  -4,  -6, -12, -11, -13, -11, -10,  -8,  -7,  -6,  -8, -11, -11, -12, -12, -13, -11, -12, -15, -16, -15, -15, -20, -23, -25, -28, -29, -34, -38, -41, -45, -42, -42, -45, -46, -43, -49, -62, -58, -51, -48, -47, -45, -44, -42, -41, -39, -38, -35, -33, -30, -27, -24, -23, -21, -19, -18, -16, -14, -12,  -9,  -6,  -3,  -0,   3,   6,   9,  12,  14,  16,  18,  20,  22,  24,  25,  25,  26,  27,  26,  26,  26,  28,  33,  32,  35,  31,  30,  29,  28,  28,  28,  27,  27,  27,  27,  27,  29,  29,  29,  28,  27,  26,  24,  23,  23,  23,  24,  27,  25,  23,  22,  20,  18,  16,  15,  15,  13,  12,  12,  11,  11,  12,  13,  12,  11,  11,   9,   8,   7,   6,   6,   5,   4,   4,   4,   3,   0,  -1,  -1,  -2,  -2,  -0,  -4,  -9, -14, -18, -22, -25, -27, -28, -29, -32, -34, -34, -35, -36, -40, -44, -48, -54, -53, -54, -56, -58, -62, -66, -66, -69, -72, -70, -71, -75, -74, -75, -75, -75, -75, -75, -75, -75, -72, -70, -72, -76, -74, -71, -69, -67, -63, -60, -59, -59, -55, -50, -48, -44, -42, -39, -37, -34, -32, -32, -30, -25, -21, -19, -16, -13,  -8,  -6,  -4,   1,   5,   9,  13,  18,  22,  25,  31,  39,  37,  31,  36,  38,  40,  40,  41,  41,  41,  42,  42,  43,  43,  45,  46,  47,  48,  49,  50,  50,  50,  52,  51,  50,  44,  37,  31,  39,  41,  43,  38,  36,  33,  32,  30,  28,  26,  25,  24,  22,  21,  21,  20,  19,  18,  18,  16,  14,  12,  15,  12,  11,  10,   9,   8,   7,   7,   6,   6,
-  /*  19.0 */   5,   5,   5,   5,   6,   7,   8,   9,   8,  10,   9,  10,   9,   9,   8,   8,   8,   8,   7,   8,   7,   7,   7,   6,  13,   8,  -2,  -2,  -3,  -5,  -7,  -8,  -9, -10, -12, -14, -16, -17, -19, -21, -22, -24, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -46, -46, -47, -47, -47, -47, -46, -45, -44, -43, -41, -39, -37, -35, -34, -32, -30, -28, -28, -25, -19, -16, -13, -11,  -7,  -5,  -4,  -6, -13, -13, -14, -12, -11, -10,  -9,  -7,  -7, -12, -12, -14, -13, -14, -16, -16, -20, -22, -24, -26, -27, -27, -27, -28, -27, -29, -36, -44, -55, -62, -61, -55, -55, -61, -62, -57, -52, -48, -48, -47, -45, -43, -41, -40, -39, -37, -34, -32, -29, -25, -23, -21, -19, -17, -16, -14, -12, -10,  -8,  -5,  -2,   1,   4,   8,  11,  14,  15,  17,  18,  20,  22,  23,  24,  26,  27,  27,  26,  26,  26,  29,  33,  34,  35,  32,  31,  31,  30,  28,  28,  27,  26,  26,  26,  27,  28,  30,  31,  30,  30,  28,  26,  25,  24,  23,  25,  28,  26,  25,  23,  21,  19,  18,  18,  18,  17,  16,  13,  11,  11,  12,  13,  12,  12,  13,  11,   9,   8,   8,   7,   6,   5,   5,   5,   5,   2,   1,  -0,  -1,   1,  -0,  -5, -10, -15, -19, -23, -27, -29, -31, -32, -34, -36, -37, -36, -35, -37, -42, -43, -50, -50, -52, -54, -56, -58, -60, -63, -67, -65, -67, -69, -69, -70, -70, -71, -72, -71, -72, -72, -70, -68, -65, -67, -67, -70, -68, -67, -65, -63, -60, -60, -57, -51, -49, -48, -44, -41, -39, -38, -35, -33, -31, -29, -27, -24, -21, -18, -14, -10,  -7,  -4,   0,   4,   7,  10,  15,  19,  22,  24,  30,  33,  30,  33,  35,  37,  38,  39,  39,  40,  40,  40,  41,  42,  43,  45,  46,  47,  49,  49,  49,  49,  51,  50,  48,  42,  35,  33,  38,  38,  38,  37,  35,  33,  31,  29,  26,  25,  23,  22,  21,  20,  19,  17,  19,  15,  17,  14,  12,  11,  10,   9,   9,   7,   7,   7,   6,   6,   6,   5,
-  /*  20.0 */   4,   5,   4,   4,   4,   5,   6,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   7,   5,   6,  18,  12,  -2,  -3,  -4,  -5,  -7,  -8, -10, -11, -13, -15, -17, -18, -20, -22, -23, -24, -26, -28, -29, -31, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -48, -47, -46, -46, -44, -43, -41, -40, -38, -36, -34, -32, -30, -29, -29, -21, -16, -14, -12, -10,  -7,  -6,  -6, -10, -15, -19, -17, -16, -13, -12, -11, -10,  -9, -13, -16, -15, -17, -17, -18, -19, -19, -21, -23, -25, -26, -27, -36, -37, -41, -45, -47, -51, -59, -62, -65, -63, -59, -57, -53, -50, -47, -46, -45, -46, -45, -43, -41, -40, -38, -36, -33, -30, -27, -24, -21, -18, -17, -15, -14, -12, -10,  -8,  -6,  -4,  -1,   2,   6,   9,  13,  15,  17,  18,  19,  20,  21,  23,  23,  25,  26,  25,  25,  26,  28,  31,  33,  34,  34,  34,  33,  32,  30,  29,  27,  27,  27,  27,  27,  27,  29,  30,  31,  31,  32,  30,  28,  27,  25,  24,  25,  27,  27,  25,  23,  21,  20,  20,  22,  23,  24,  20,  14,  12,  12,  12,  13,  14,  14,  14,  12,  11,  10,   9,   9,   8,   7,   6,   7,   6,   3,   2,   2,   2,   3,  -1,  -5, -10, -15, -20, -24, -28, -31, -33, -34, -35, -36, -37, -35, -33, -35, -39, -43, -48, -49, -50, -52, -55, -56, -57, -61, -63, -61, -64, -65, -66, -66, -67, -67, -67, -68, -68, -68, -67, -65, -65, -63, -63, -64, -64, -62, -61, -60, -57, -55, -53, -50, -51, -48, -44, -42, -39, -37, -35, -34, -31, -30, -28, -25, -23, -21, -17, -13,  -9,  -6,  -2,   2,   5,   9,  13,  17,  20,  21,  22,  31,  28,  31,  33,  34,  35,  36,  37,  38,  38,  39,  40,  41,  42,  44,  45,  47,  48,  49,  49,  49,  50,  49,  47,  41,  31,  36,  41,  41,  37,  36,  33,  31,  28,  28,  27,  24,  21,  22,  21,  19,  18,  15,  14,  13,  13,  11,  10,   9,   7,   8,   6,   6,   5,   7,   5,   5,   4,   4,
-  /*  21.0 */   3,   2,   2,   2,   3,   4,   5,   6,   7,   8,   8,   9,   9,  10,   9,   9,   9,   9,   8,   7,   6,   6,  12,  15,  10,  -0,  -2,  -3,  -4,  -6,  -8,  -9, -11, -12, -14, -16, -17, -19, -20, -22, -23, -25, -27, -28, -30, -32, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -48, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -36, -34, -32, -31, -30, -28, -22, -18, -15, -13, -11, -10, -10, -13, -15, -19, -22, -21, -21, -14, -13, -14, -12, -12, -11, -18, -19, -20, -20, -22, -23, -24, -21, -23, -25, -29, -34, -42, -44, -46, -44, -48, -51, -51, -51, -52, -52, -51, -51, -51, -50, -49, -47, -45, -44, -44, -42, -41, -39, -36, -34, -31, -29, -26, -22, -19, -16, -15, -13, -12, -10,  -8,  -6,  -4,  -2,   1,   4,   7,  11,  14,  16,  17,  18,  18,  19,  20,  21,  22,  23,  24,  24,  24,  25,  28,  32,  35,  36,  35,  35,  35,  33,  32,  30,  29,  28,  27,  27,  27,  27,  29,  29,  30,  31,  32,  32,  30,  29,  28,  26,  26,  28,  27,  25,  24,  22,  21,  22,  25,  29,  30,  24,  17,  14,  13,  13,  13,  15,  15,  14,  13,  11,  10,   9,  10,   9,   9,   9,   8,   6,   4,   3,   4,   6,   4,  -0,  -4,  -8, -13, -19, -24, -28, -31, -33, -35, -35, -36, -36, -35, -34, -33, -35, -40, -43, -46, -48, -50, -55, -55, -57, -58, -57, -57, -59, -61, -62, -63, -63, -63, -63, -64, -64, -65, -65, -64, -64, -62, -60, -60, -62, -59, -58, -57, -56, -54, -52, -51, -52, -48, -43, -42, -39, -37, -36, -34, -32, -31, -29, -27, -24, -22, -19, -15, -11,  -8,  -4,  -1,   3,   8,  12,  15,  18,  19,  21,  28,  26,  29,  31,  33,  34,  35,  36,  36,  37,  38,  39,  40,  41,  42,  45,  46,  47,  48,  48,  48,  49,  48,  44,  35,  29,  38,  37,  36,  34,  33,  33,  29,  30,  26,  25,  23,  19,  19,  18,  16,  16,  14,  12,  12,  10,   9,   8,   7,   6,   5,   4,   5,   4,   5,   6,   4,   4,   3,
-  /*  22.0 */   1,   1,   1,   1,   2,   3,   4,   5,   6,   7,   8,   8,   9,   9,   9,   9,   8,   8,   7,   8,  14,  11,   7,   2,  -1,  -0,  -1,  -3,  -5,  -7,  -9, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -29, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -45, -45, -46, -47, -47, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -37, -35, -33, -31, -29, -25, -22, -18, -15, -13, -12, -12, -14, -16, -19, -24, -26, -24, -24, -18, -16, -15, -15, -14, -13, -18, -20, -19, -17, -18, -20, -21, -23, -24, -29, -32, -37, -38, -42, -43, -49, -51, -51, -51, -51, -52, -52, -52, -52, -51, -50, -50, -49, -47, -45, -44, -42, -40, -38, -36, -34, -31, -27, -24, -21, -17, -14, -13, -11, -10,  -8,  -6,  -4,  -2,   0,   3,   6,   9,  11,  14,  15,  17,  17,  17,  18,  19,  20,  22,  23,  24,  24,  24,  25,  27,  33,  36,  36,  36,  37,  37,  35,  33,  32,  30,  29,  27,  26,  25,  25,  27,  29,  30,  31,  32,  32,  31,  32,  31,  30,  30,  30,  27,  27,  25,  24,  23,  24,  26,  28,  28,  26,  20,  17,  15,  13,  13,  15,  15,  14,  13,  12,  11,  10,   9,   9,  10,  11,   8,   6,   5,   4,   6,   6,   4,   1,  -2,  -6, -10, -16, -23, -27, -31, -33, -34, -34, -34, -35, -35, -33, -32, -32, -36, -41, -42, -45, -44, -49, -52, -53, -54, -54, -54, -56, -58, -60, -60, -60, -61, -60, -59, -60, -60, -61, -62, -62, -60, -58, -58, -59, -58, -57, -57, -56, -54, -51, -51, -51, -48, -44, -42, -40, -38, -37, -34, -33, -30, -30, -29, -26, -23, -20, -17, -14, -10,  -6,  -2,   1,   5,  10,  14,  17,  19,  22,  23,  24,  27,  28,  30,  32,  34,  35,  35,  36,  37,  38,  39,  40,  41,  44,  45,  47,  48,  47,  49,  47,  43,  33,  26,  32,  37,  37,  36,  34,  32,  30,  27,  26,  23,  22,  20,  19,  17,  16,  15,  13,  11,  10,   8,   7,   7,   6,   5,   4,   3,   3,   2,   4,   2,   2,   3,   2,   1,
-  /*  23.0 */  -1,  -1,  -0,   1,   1,   2,   3,   4,   5,   6,   7,   7,   7,   6,   7,   8,  10,  11,  12,   7,   4,   4,   3,   3,   3,   2,  -0,  -3,  -6,  -8,  -9, -11, -12, -14, -16, -17, -18, -20, -21, -22, -24, -26, -27, -29, -31, -33, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -47, -48, -47, -47, -46, -46, -45, -43, -42, -40, -39, -37, -33, -33, -31, -28, -25, -21, -18, -16, -14, -13, -13, -16, -18, -22, -26, -29, -27, -26, -27, -25, -20, -16, -17, -18, -19, -23, -23, -22, -22, -23, -24, -25, -24, -27, -30, -36, -39, -44, -47, -49, -50, -51, -51, -52, -52, -52, -53, -53, -52, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -29, -26, -22, -19, -16, -12, -11,  -9,  -8,  -6,  -4,  -2,  -1,   2,   4,   7,   9,  11,  13,  15,  16,  17,  17,  18,  20,  21,  22,  23,  24,  25,  26,  27,  29,  33,  36,  38,  37,  39,  38,  36,  35,  33,  31,  29,  28,  26,  25,  25,  27,  27,  30,  32,  32,  33,  33,  34,  36,  34,  33,  31,  29,  29,  27,  25,  25,  26,  27,  27,  27,  25,  22,  19,  16,  14,  14,  14,  15,  14,  13,  13,  11,  10,  10,   9,  11,  11,   8,   7,   6,   6,   7,   6,   5,   2,   0,  -3,  -8, -13, -20, -26, -30, -32, -33, -33, -33, -33, -33, -30, -28, -30, -38, -40, -43, -46, -45, -47, -47, -48, -50, -51, -52, -53, -55, -56, -57, -56, -57, -58, -59, -60, -58, -59, -60, -60, -57, -55, -56, -56, -57, -56, -56, -55, -54, -51, -51, -51, -48, -44, -43, -41, -39, -37, -35, -33, -31, -30, -29, -28, -26, -22, -19, -15, -12,  -8,  -4,  -0,   4,   8,  13,  16,  19,  26,  20,  17,  19,  22,  26,  30,  32,  34,  35,  36,  37,  38,  39,  40,  39,  42,  44,  46,  47,  48,  47,  40,  33,  27,  31,  35,  36,  35,  34,  31,  29,  31,  25,  24,  23,  21,  19,  15,  14,  13,  12,  11,   9,   8,   7,   5,   4,   3,   2,   2,   1,   1,   1,  -0,   1,   0,  -0,  -1,  -1,
-  /*  24.0 */  -2,  -2,  -1,  -0,   0,   2,   2,   3,   4,   4,   4,   6,   7,  12,  14,  10,   7,   5,   5,   4,   4,   4,   4,   3,   2,   1,  -2,  -5,  -7,  -9, -10, -11, -13, -14, -16, -17, -19, -20, -21, -22, -24, -26, -28, -29, -31, -33, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -47, -47, -47, -47, -47, -46, -45, -44, -43, -42, -41, -37, -35, -33, -33, -30, -27, -22, -19, -18, -17, -15, -14, -13, -18, -20, -23, -28, -31, -31, -28, -28, -29, -28, -24, -21, -23, -24, -26, -25, -25, -26, -26, -26, -27, -27, -32, -34, -39, -43, -45, -48, -50, -51, -52, -52, -52, -51, -52, -52, -53, -52, -51, -50, -49, -47, -46, -44, -41, -39, -36, -34, -31, -28, -25, -21, -17, -13, -11,  -9,  -7,  -5,  -3,  -2,   0,   2,   3,   5,   7,   9,  11,  14,  16,  17,  18,  19,  20,  20,  22,  23,  24,  25,  27,  28,  30,  31,  33,  35,  37,  40,  39,  38,  38,  36,  34,  33,  31,  30,  29,  27,  26,  26,  28,  29,  31,  32,  33,  34,  36,  37,  37,  35,  34,  33,  30,  28,  26,  26,  26,  27,  27,  26,  25,  22,  20,  17,  15,  14,  15,  14,  14,  13,  13,  12,  12,  11,  10,  11,  11,   9,   8,   8,   8,   8,   8,   6,   4,   2,  -2,  -5, -11, -18, -24, -28, -31, -33, -33, -33, -33, -30, -27, -30, -36, -37, -39, -42, -45, -47, -48, -45, -46, -46, -48, -48, -49, -51, -52, -53, -54, -55, -55, -56, -58, -58, -59, -59, -59, -58, -57, -56, -55, -56, -56, -55, -55, -55, -52, -51, -51, -49, -46, -43, -41, -39, -37, -36, -33, -32, -32, -31, -29, -27, -24, -20, -17, -13, -10,  -6,  -2,   2,   6,  10,  14,  17,  24,  15,  18,  21,  23,  27,  25,  29,  32,  35,  36,  37,  37,  37,  38,  39,  42,  44,  45,  46,  48,  44,  35,  29,  36,  37,  35,  34,  32,  33,  30,  28,  25,  24,  21,  20,  19,  16,  16,  13,  12,  11,   9,   7,   5,   4,   3,   2,   1,   1,  -0,  -1,  -1,  -1,  -1,  -2,  -2,  -3,  -2,  -2,
-  /*  25.0 */  -3,  -2,  -1,  -1,  -1,  -0,   1,   0,   5,   6,   7,   6,  14,   7,   3,   4,   4,   4,   4,   4,   3,   3,   2,   1,  -0,  -2,  -4,  -7,  -8, -10, -11, -12, -14, -15, -16, -17, -19, -20, -21, -23, -25, -26, -28, -30, -31, -33, -34, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -46, -45, -45, -43, -43, -41, -39, -37, -34, -35, -33, -30, -26, -22, -21, -20, -19, -16, -15, -16, -19, -23, -22, -27, -32, -32, -30, -28, -27, -27, -28, -28, -26, -24, -27, -23, -23, -24, -24, -28, -28, -32, -33, -39, -43, -44, -47, -49, -51, -52, -52, -52, -51, -51, -51, -51, -52, -52, -51, -49, -48, -47, -45, -43, -41, -38, -35, -33, -29, -26, -22, -19, -15, -11,  -8,  -7,  -4,  -2,  -0,   1,   3,   5,   6,   8,   9,  11,  13,  15,  17,  18,  19,  21,  21,  21,  22,  23,  25,  26,  28,  31,  33,  33,  31,  34,  34,  37,  39,  40,  39,  38,  36,  34,  32,  31,  30,  29,  28,  27,  27,  27,  28,  28,  30,  33,  35,  36,  36,  36,  35,  33,  30,  29,  27,  26,  25,  27,  28,  26,  25,  22,  20,  19,  17,  16,  15,  14,  13,  13,  13,  13,  13,  13,  12,  13,  12,  10,   9,  10,  10,  10,   9,   8,   5,   2,  -2,  -5, -10, -16, -22, -27, -30, -31, -32, -33, -33, -28, -27, -29, -30, -32, -32, -34, -36, -38, -42, -43, -43, -45, -46, -46, -46, -48, -49, -48, -52, -54, -54, -56, -59, -60, -60, -60, -62, -62, -62, -61, -59, -56, -55, -54, -53, -52, -51, -50, -51, -49, -45, -41, -40, -39, -37, -35, -33, -31, -32, -32, -30, -27, -25, -21, -17, -14, -11,  -7,  -4,   1,   5,   9,  12,  15,  18,  20,  22,  25,  28,  26,  25,  24,  29,  33,  36,  34,  36,  37,  37,  39,  41,  43,  44,  46,  47,  42,  33,  38,  38,  35,  34,  32,  31,  28,  27,  26,  24,  21,  19,  17,  15,  14,  13,  10,   9,   9,   7,   5,   3,   2,   1,   0,  -1,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -3,  -3,
-  /*  26.0 */  -4,  -3,  -3,  -2,  -2,  -1,   6,   2,   5,   6,   3,   5,   5,   3,   4,   4,   4,   3,   3,   2,   2,   1,  -0,  -2,  -3,  -5,  -7,  -8,  -9, -11, -12, -13, -14, -15, -17, -18, -19, -20, -22, -23, -25, -27, -28, -30, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -46, -46, -46, -46, -46, -45, -44, -43, -42, -41, -37, -36, -35, -35, -31, -29, -24, -21, -21, -21, -20, -18, -19, -20, -23, -25, -23, -27, -33, -31, -29, -29, -29, -27, -26, -26, -25, -26, -28, -25, -25, -24, -26, -28, -30, -33, -39, -44, -43, -45, -48, -50, -51, -53, -52, -51, -50, -50, -50, -50, -51, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -28, -24, -21, -17, -13, -10,  -6,  -4,  -2,   1,   2,   4,   6,   7,   9,  11,  12,  13,  15,  17,  19,  20,  22,  23,  24,  24,  24,  25,  26,  27,  29,  32,  34,  34,  31,  31,  34,  36,  39,  39,  40,  40,  37,  35,  33,  32,  32,  31,  30,  28,  27,  26,  26,  26,  28,  30,  32,  34,  33,  33,  32,  31,  29,  28,  27,  26,  26,  28,  30,  28,  26,  24,  22,  21,  19,  17,  15,  14,  13,  13,  12,  13,  13,  13,  13,  14,  12,  11,  13,  12,  12,  11,  10,   8,   5,   2,  -1,  -5, -10, -15, -21, -26, -28, -30, -31, -32, -33, -31, -26, -22, -24, -26, -28, -30, -31, -31, -35, -40, -42, -44, -45, -45, -45, -46, -48, -48, -49, -53, -55, -57, -59, -61, -62, -64, -66, -66, -65, -64, -62, -58, -53, -50, -49, -48, -53, -55, -52, -49, -46, -42, -39, -38, -37, -36, -33, -31, -31, -30, -28, -26, -24, -21, -19, -16, -13,  -9,  -6,  -1,   3,   7,  10,  13,  16,  19,  22,  26,  28,  29,  29,  28,  25,  28,  33,  36,  36,  36,  37,  39,  40,  42,  43,  44,  43,  39,  35,  39,  38,  36,  34,  32,  28,  27,  26,  24,  22,  19,  17,  14,  13,  11,  10,   8,   7,   6,   5,   3,   2,   1,  -0,  -2,  -3,  -3,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,
-  /*  27.0 */  -4,  -5,  -4,  -1,  -1,  -3,  -3,  -3,  -1,  -1,   1,   2,   2,   3,   3,   3,   2,   1,   0,   0,  -1,  -2,  -3,  -5,  -6,  -7,  -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -23, -24, -26, -28, -29, -31, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -45, -44, -43, -43, -43, -38, -37, -36, -36, -33, -31, -27, -24, -23, -22, -21, -20, -20, -21, -22, -25, -26, -25, -28, -31, -30, -29, -29, -29, -27, -26, -26, -27, -29, -27, -25, -26, -26, -27, -30, -30, -33, -38, -44, -44, -45, -48, -50, -52, -52, -52, -51, -49, -49, -49, -49, -49, -49, -49, -48, -46, -45, -43, -41, -38, -35, -33, -30, -26, -23, -19, -15, -12,  -8,  -4,  -1,   1,   3,   5,   7,   8,  10,  12,  14,  15,  17,  18,  20,  21,  23,  23,  25,  26,  26,  26,  25,  26,  28,  30,  31,  34,  34,  33,  32,  32,  36,  38,  39,  39,  40,  38,  38,  35,  33,  33,  33,  32,  30,  27,  26,  26,  25,  26,  27,  29,  30,  30,  30,  30,  29,  29,  28,  27,  27,  28,  30,  31,  30,  27,  25,  23,  22,  20,  18,  16,  15,  14,  14,  14,  13,  13,  13,  14,  13,  12,  14,  15,  14,  12,  11,  10,   7,   4,   1,  -2,  -6, -10, -15, -20, -25, -27, -29, -28, -26, -26, -30, -28, -20, -22, -24, -25, -27, -29, -31, -31, -35, -40, -45, -43, -45, -45, -44, -46, -48, -47, -50, -54, -57, -60, -63, -66, -67, -67, -67, -65, -59, -51, -47, -41, -41, -42, -42, -47, -56, -56, -51, -46, -44, -40, -36, -35, -35, -34, -32, -31, -31, -29, -27, -24, -22, -19, -18, -15, -11,  -7,  -4,   1,   5,   9,  12,  15,  17,  21,  24,  27,  30,  31,  32,  26,  24,  29,  33,  35,  35,  37,  39,  40,  42,  43,  44,  42,  46,  33,  33,  35,  34,  32,  29,  28,  25,  23,  22,  18,  16,  15,  13,  11,  10,   8,   7,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -4,
-  /*  28.0 */  -5,  -4,  -0,  -2,   1,  -4,  -5,  -3,  -2,  -1,  -0,   0,   1,   1,   0,  -0,  -1,  -2,  -2,  -3,  -3,  -5,  -6,  -7,  -8,  -9, -10, -11, -12, -13, -14, -14, -15, -16, -18, -19, -21, -22, -24, -25, -27, -28, -30, -31, -32, -34, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -45, -45, -45, -45, -44, -44, -43, -43, -43, -37, -37, -35, -36, -34, -32, -29, -25, -24, -24, -23, -22, -21, -21, -23, -24, -26, -28, -28, -27, -28, -27, -26, -26, -25, -26, -27, -30, -31, -30, -26, -25, -26, -28, -30, -31, -34, -36, -38, -45, -45, -46, -48, -50, -52, -52, -51, -50, -48, -48, -47, -47, -47, -47, -46, -46, -44, -43, -41, -39, -36, -34, -31, -28, -25, -21, -18, -14, -10,  -6,  -2,   2,   4,   6,   8,  10,  11,  13,  15,  17,  19,  20,  21,  23,  25,  26,  26,  26,  27,  27,  27,  27,  27,  28,  30,  31,  34,  38,  45,  44,  41,  41,  39,  39,  39,  39,  39,  38,  36,  36,  36,  36,  34,  31,  30,  28,  28,  27,  27,  28,  28,  28,  28,  29,  29,  28,  28,  29,  29,  29,  30,  30,  30,  29,  26,  25,  23,  22,  21,  20,  17,  15,  15,  15,  15,  15,  14,  14,  13,  11,  13,  18,  17,  14,  12,  10,   8,   6,   3,  -0,  -3,  -7, -11, -15, -19, -23, -26, -24, -21, -19, -19, -21, -19, -18, -20, -20, -21, -25, -30, -32, -32, -32, -38, -44, -42, -45, -48, -47, -47, -46, -47, -48, -53, -56, -60, -63, -63, -58, -55, -53, -45, -33, -29, -29, -29, -30, -31, -30, -34, -41, -48, -49, -42, -40, -37, -34, -32, -33, -35, -37, -37, -35, -31, -28, -25, -23, -20, -19, -16, -12,  -9,  -5,  -1,   3,   7,  10,  13,  16,  20,  23,  26,  29,  31,  31,  29,  25,  26,  33,  35,  35,  37,  38,  40,  41,  42,  43,  40,  48,  32,  30,  32,  33,  30,  28,  24,  22,  21,  18,  17,  15,  13,  11,   9,   8,   6,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,
-  /*  29.0 */  -5,  -3,  -5,  -6,  -5,  -6,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -6,  -7,  -8,  -9, -10, -10, -11, -12, -12, -13, -13, -15, -16, -17, -17, -19, -20, -22, -23, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -38, -39, -41, -42, -43, -43, -44, -44, -44, -44, -44, -44, -43, -43, -42, -42, -41, -38, -35, -37, -35, -33, -31, -29, -25, -24, -25, -24, -23, -22, -22, -24, -24, -25, -27, -29, -28, -27, -27, -26, -25, -25, -25, -25, -29, -29, -27, -28, -28, -29, -29, -30, -32, -35, -37, -41, -46, -46, -47, -48, -51, -52, -52, -51, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -40, -38, -37, -34, -32, -29, -26, -23, -19, -16, -12,  -8,  -4,  -0,   4,   7,   9,  11,  13,  15,  16,  18,  20,  22,  23,  25,  26,  27,  28,  28,  27,  28,  29,  29,  29,  29,  30,  32,  32,  34,  39,  37,  37,  36,  42,  42,  41,  41,  42,  42,  40,  40,  40,  40,  40,  38,  36,  34,  31,  29,  28,  28,  28,  27,  27,  27,  27,  28,  29,  28,  29,  30,  31,  31,  30,  29,  29,  26,  25,  23,  22,  23,  21,  20,  18,  16,  15,  16,  16,  15,  16,  14,  13,  15,  20,  17,  14,  12,  10,   8,   5,   2,  -0,  -3,  -7, -11, -15, -18, -21, -21, -15, -12, -13, -11,  -8,  -7, -11, -17, -17, -17, -22, -25, -27, -30, -30, -34, -42, -39, -45, -50, -49, -48, -47, -47, -49, -51, -55, -57, -55, -48, -40, -34, -31, -29, -30, -30, -31, -33, -34, -33, -32, -31, -30, -40, -44, -40, -37, -34, -32, -31, -32, -38, -43, -42, -39, -34, -30, -27, -24, -21, -20, -18, -13,  -9,  -6,  -2,   2,   6,   8,  12,  15,  19,  22,  24,  27,  29,  30,  30,  26,  24,  29,  33,  36,  36,  38,  39,  40,  42,  43,  36,  37,  23,  30,  32,  30,  28,  25,  23,  21,  20,  17,  16,  13,  11,  10,   9,   7,   5,   4,   3,   2,   1,  -1,  -3,  -3,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,
-  /*  30.0 */  -8,  -8,  -8,  -8,  -7,  -8,  -6,  -6,  -6,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -8,  -9, -10, -11, -11, -12, -12, -13, -13, -14, -15, -16, -17, -17, -18, -20, -21, -23, -24, -25, -27, -28, -29, -31, -32, -33, -34, -36, -37, -38, -39, -40, -41, -42, -42, -43, -43, -43, -43, -43, -43, -42, -42, -41, -40, -38, -35, -37, -35, -33, -31, -30, -28, -25, -25, -25, -24, -22, -23, -24, -24, -23, -24, -27, -28, -29, -29, -28, -28, -28, -28, -27, -28, -28, -28, -28, -29, -29, -29, -29, -30, -32, -36, -39, -41, -46, -46, -47, -49, -51, -52, -52, -51, -49, -47, -46, -45, -43, -42, -42, -41, -41, -40, -38, -36, -35, -33, -30, -28, -25, -21, -18, -14, -10,  -6,  -3,   1,   5,   9,  12,  14,  16,  18,  20,  22,  23,  25,  26,  28,  29,  30,  30,  33,  33,  30,  31,  30,  30,  31,  32,  33,  34,  35,  35,  37,  39,  40,  41,  44,  42,  40,  43,  47,  49,  48,  47,  46,  44,  41,  39,  38,  35,  33,  30,  29,  27,  26,  26,  26,  27,  27,  28,  29,  30,  31,  31,  30,  30,  29,  28,  27,  26,  24,  23,  22,  22,  21,  21,  18,  17,  17,  16,  16,  16,  17,  17,  17,  19,  17,  14,  12,  10,   7,   5,   2,  -0,  -4,  -8, -13, -15, -17, -18, -13,  -7,  -8,  -8,  -6,  -6,  -7, -13, -16, -15, -19, -22, -23, -24, -27, -28, -28, -34, -33, -39, -49, -49, -47, -46, -46, -48, -50, -48, -39, -35, -29, -25, -26, -27, -28, -30, -30, -31, -33, -34, -35, -35, -34, -35, -38, -38, -36, -35, -34, -32, -31, -32, -41, -44, -42, -41, -38, -32, -27, -24, -22, -22, -19, -15, -11,  -7,  -3,   1,   4,   7,  10,  14,  17,  21,  23,  25,  28,  30,  31,  30,  26,  27,  32,  34,  36,  37,  39,  39,  42,  42,  35,  25,  23,  30,  30,  28,  26,  23,  21,  19,  17,  16,  14,  12,  11,   9,   8,   6,   4,   3,   2,  -0,  -1,  -3,  -4,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -7,  -7,  -7,  -7,  -5,  -8,
-  /*  31.0 */  -8,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -9,  -9, -10, -11, -12, -13, -13, -13, -13, -14, -15, -15, -16, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -37, -38, -39, -40, -41, -41, -42, -42, -42, -42, -42, -42, -42, -41, -41, -40, -38, -34, -35, -36, -34, -32, -30, -28, -27, -26, -26, -24, -24, -23, -24, -25, -24, -24, -25, -27, -27, -28, -28, -29, -28, -28, -28, -28, -29, -29, -29, -28, -29, -29, -29, -30, -31, -34, -36, -40, -43, -44, -44, -48, -51, -52, -52, -51, -50, -48, -46, -45, -43, -42, -40, -40, -39, -39, -38, -36, -35, -33, -31, -28, -26, -23, -19, -16, -12,  -8,  -5,  -1,   3,   7,  11,  14,  18,  20,  22,  24,  25,  27,  28,  29,  30,  32,  32,  32,  34,  32,  32,  32,  31,  30,  32,  33,  35,  36,  37,  37,  38,  39,  41,  44,  44,  44,  43,  46,  51,  53,  54,  52,  50,  48,  46,  43,  42,  39,  37,  34,  32,  29,  27,  27,  27,  27,  28,  29,  31,  32,  31,  31,  30,  29,  28,  28,  27,  27,  26,  24,  23,  22,  21,  21,  19,  17,  15,  15,  16,  16,  17,  17,  18,  20,  18,  16,  14,  12,   9,   5,   2,  -1,  -6, -10, -14, -16, -16, -11,  -5,  -3,  -4,  -5,  -5,  -7,  -9, -14, -14, -15, -19, -21, -22, -23, -25, -26, -25, -26, -31, -37, -48, -47, -45, -44, -46, -48, -44, -36, -24, -22, -24, -26, -28, -29, -30, -31, -31, -33, -34, -35, -36, -36, -37, -36, -37, -38, -37, -36, -34, -32, -31, -31, -33, -41, -43, -42, -39, -35, -29, -24, -23, -22, -20, -16, -12,  -8,  -4,  -1,   3,   6,   9,  13,  16,  19,  22,  24,  27,  29,  30,  31,  29,  27,  30,  33,  36,  37,  38,  39,  42,  42,  35,  20,  24,  29,  28,  26,  24,  22,  20,  18,  16,  14,  13,  11,  10,   9,   7,   6,   4,   3,   1,  -1,  -3,  -4,  -5,  -7,  -7,  -8,  -8,  -8,  -8,  -9,  -8,  -8,  -8,  -6,  -8,  -8,  -9,  -8,
-  /*  32.0 */  -9, -10,  -9,  -9, -10, -10,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9, -10, -11, -11, -12, -13, -14, -14, -14, -14, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -36, -37, -38, -39, -40, -40, -40, -41, -41, -42, -42, -42, -42, -42, -41, -41, -39, -38, -37, -33, -35, -34, -33, -31, -30, -28, -27, -26, -25, -24, -23, -26, -24, -26, -26, -27, -28, -28, -28, -27, -28, -27, -27, -27, -27, -27, -28, -29, -29, -28, -27, -28, -29, -31, -33, -34, -37, -39, -41, -43, -46, -50, -51, -51, -51, -50, -48, -47, -45, -43, -37, -40, -39, -37, -37, -37, -36, -35, -34, -31, -29, -26, -24, -21, -18, -14, -10,  -7,  -3,   1,   4,   8,  12,  16,  20,  23,  25,  27,  28,  30,  31,  33,  34,  35,  36,  36,  36,  38,  34,  34,  33,  33,  33,  34,  36,  38,  39,  40,  41,  40,  40,  42,  43,  43,  44,  46,  48,  49,  50,  55,  54,  51,  48,  47,  44,  41,  39,  38,  36,  32,  30,  28,  28,  29,  30,  32,  33,  32,  33,  32,  30,  29,  27,  27,  27,  29,  30,  27,  25,  22,  18,  14,  11,  11,  12,  16,  19,  17,  17,  16,  20,  21,  20,  19,  18,  15,  11,   7,   2,  -2,  -7, -10, -12, -14, -12,  -4,  -1,  -1,  -2,  -3,  -5,  -6, -10, -12, -12, -14, -18, -21, -22, -24, -24, -25, -25, -26, -31, -40, -45, -43, -43, -44, -46, -46, -35, -28, -25, -24, -26, -28, -29, -30, -31, -32, -33, -35, -37, -37, -37, -37, -38, -38, -39, -39, -39, -37, -34, -34, -32, -32, -31, -35, -41, -41, -38, -34, -29, -26, -24, -24, -21, -17, -13,  -9,  -6,  -2,   2,   5,   9,  12,  15,  18,  21,  24,  26,  29,  30,  32,  31,  26,  31,  33,  33,  36,  37,  39,  42,  42,  33,  16,  25,  29,  28,  26,  24,  22,  20,  17,  16,  13,  12,  11,   9,   8,   7,   6,   4,   1,  -1,  -3,  -4,  -6,  -7,  -8,  -8,  -9,  -8,  -8,  -9,  -8,  -5,  -9,  -9,  -9,  -9,  -9,  -9,  -9,
-  /*  33.0 */  -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -14, -14, -15, -15, -15, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -42, -41, -41, -41, -40, -38, -38, -37, -33, -34, -34, -33, -32, -31, -29, -28, -26, -24, -24, -22, -22, -24, -22, -25, -27, -30, -30, -30, -28, -27, -28, -28, -27, -27, -27, -28, -29, -30, -30, -30, -30, -29, -29, -31, -33, -34, -36, -39, -40, -44, -48, -50, -51, -51, -50, -49, -47, -46, -44, -42, -40, -38, -38, -36, -35, -35, -34, -32, -31, -29, -27, -25, -22, -18, -16, -12,  -9,  -5,  -1,   3,   6,  10,  14,  17,  21,  25,  28,  30,  32,  33,  34,  36,  37,  38,  39,  39,  40,  38,  38,  38,  37,  35,  35,  35,  36,  40,  43,  45,  48,  45,  43,  41,  42,  42,  41,  39,  46,  48,  51,  52,  55,  52,  52,  50,  48,  45,  42,  40,  39,  36,  32,  30,  29,  29,  31,  33,  33,  33,  32,  31,  30,  29,  28,  27,  27,  28,  28,  29,  23,  14,  10,   7,   7,   7,   9,  12,  14,  15,  16,  16,  20,  24,  24,  21,  19,  17,  13,   8,   3,  -1,  -4,  -5,  -3,  -3,  -0,   4,   3,   1,  -1,  -4,  -5,  -8, -10, -12, -12, -14, -19, -21, -21, -21, -23, -24, -23, -26, -29, -37, -45, -47, -47, -45, -40, -34, -27, -23, -24, -25, -27, -29, -30, -31, -32, -33, -34, -36, -37, -38, -38, -38, -39, -39, -40, -40, -40, -37, -36, -35, -34, -34, -33, -34, -38, -39, -36, -34, -31, -28, -26, -23, -21, -18, -15, -11,  -6,  -2,   1,   5,   8,  11,  15,  18,  21,  24,  26,  28,  31,  32,  33,  31,  34,  35,  34,  34,  36,  37,  41,  43,  34,  15,  24,  28,  27,  25,  23,  21,  18,  16,  14,  13,  10,   9,   7,   6,   5,   5,   3,   0,  -2,  -4,  -6,  -7,  -8,  -9,  -9,  -9,  -9, -10, -10,  -7,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,
-  /*  34.0 */ -10, -10,  -9, -10, -10, -11, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -29, -31, -32, -32, -34, -35, -36, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -40, -39, -37, -37, -34, -32, -32, -33, -31, -30, -29, -26, -24, -23, -22, -23, -21, -23, -24, -24, -26, -28, -29, -30, -27, -27, -29, -30, -29, -28, -27, -28, -27, -28, -28, -29, -30, -30, -31, -31, -31, -32, -34, -36, -39, -40, -41, -47, -48, -48, -49, -48, -47, -46, -45, -43, -42, -40, -38, -37, -35, -34, -33, -32, -30, -29, -28, -25, -22, -20, -16, -13, -10,  -6,  -3,   1,   4,   8,  11,  15,  18,  22,  26,  29,  32,  35,  36,  38,  39,  40,  41,  41,  42,  42,  42,  42,  40,  38,  38,  38,  38,  38,  40,  42,  43,  44,  46,  45,  43,  42,  41,  40,  37,  38,  43,  45,  46,  48,  52,  51,  51,  50,  48,  46,  45,  42,  39,  34,  31,  29,  30,  32,  33,  34,  33,  33,  32,  32,  31,  29,  28,  26,  25,  23,  19,  13,   9,   9,   6,   1,   1,   5,   8,  10,  13,  14,  15,  18,  28,  26,  22,  20,  18,  14,  10,   6,   1,   0,   4,   5,   5,   6,   6,   4,  -1,  -3,  -5,  -7, -10, -11, -12, -14, -17, -20, -21, -20, -20, -21, -22, -22, -23, -28, -35, -42, -48, -44, -38, -32, -25, -25, -23, -24, -25, -26, -28, -30, -32, -34, -34, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -40, -39, -38, -36, -36, -36, -36, -36, -38, -38, -36, -35, -33, -28, -25, -23, -21, -19, -15, -11,  -7,  -3,   1,   5,   8,  11,  14,  18,  21,  24,  26,  28,  30,  31,  32,  32,  34,  37,  37,  40,  36,  37,  40,  39,  25,  11,  23,  27,  25,  24,  21,  19,  17,  16,  14,  11,   9,   7,   5,   4,   4,   3,   2,  -0,  -2,  -4,  -6,  -8,  -8,  -9, -10,  -9, -10, -12, -12,  -9, -11,  -9,  -8,  -9,  -9,  -9,  -8, -10,
-  /*  35.0 */ -10, -10, -10, -10, -10, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -26, -27, -28, -29, -30, -32, -33, -33, -34, -35, -36, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -39, -39, -36, -34, -33, -32, -32, -31, -30, -29, -27, -25, -24, -24, -23, -21, -22, -20, -22, -24, -25, -27, -28, -28, -27, -28, -27, -30, -32, -32, -30, -28, -28, -28, -29, -28, -29, -30, -31, -30, -31, -33, -32, -32, -35, -37, -39, -40, -43, -45, -47, -46, -46, -45, -45, -44, -42, -40, -39, -37, -36, -34, -33, -31, -30, -29, -27, -26, -23, -20, -18, -15, -11,  -8,  -4,  -1,   2,   6,   9,  13,  16,  20,  23,  27,  30,  34,  37,  39,  41,  42,  43,  44,  45,  44,  45,  46,  44,  43,  43,  42,  41,  41,  40,  41,  42,  44,  47,  48,  46,  46,  48,  47,  44,  43,  41,  41,  40,  40,  44,  48,  50,  50,  50,  50,  49,  47,  44,  42,  37,  36,  37,  38,  37,  37,  36,  36,  36,  34,  34,  33,  29,  28,  26,  23,  17,  12,   9,  17,  20,  17,  10,   6,   6,   7,   7,  17,  28,  24,  19,  24,  26,  25,  22,  20,  17,  13,  10,   6,   6,   9,  11,  11,   9,   6,   1,  -2,  -5,  -7,  -9, -11, -12, -14, -16, -17, -21, -22, -23, -22, -22, -22, -23, -25, -29, -32, -35, -37, -35, -32, -28, -27, -23, -22, -22, -25, -26, -29, -32, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -43, -42, -42, -42, -41, -40, -40, -39, -38, -38, -39, -39, -38, -36, -35, -34, -32, -27, -22, -21, -19, -16, -11,  -7,  -2,   2,   4,   7,  11,  14,  17,  20,  22,  25,  28,  29,  30,  31,  33,  35,  36,  36,  37,  37,  41,  39,  34,  23,  13,  20,  24,  23,  22,  21,  19,  17,  15,  12,  10,   8,   6,   5,   4,   3,   1,  -1,  -2,  -3,  -5,  -6,  -8,  -9, -10, -10, -10, -10, -12,  -9,  -4, -13, -10, -10, -10, -10,  -9, -10, -10,
-  /*  36.0 */ -11, -11, -11, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -40, -39, -38, -36, -33, -34, -32, -29, -30, -29, -29, -27, -25, -23, -23, -21, -20, -21, -20, -19, -19, -21, -24, -27, -28, -29, -29, -28, -29, -30, -30, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -32, -32, -32, -34, -33, -32, -36, -37, -40, -40, -43, -44, -44, -44, -43, -43, -42, -41, -39, -38, -37, -35, -33, -31, -30, -29, -27, -26, -23, -21, -18, -16, -11,  -9,  -5,  -3,   0,   4,   7,  11,  14,  18,  22,  25,  28,  31,  34,  38,  41,  43,  46,  47,  47,  48,  48,  48,  49,  48,  48,  48,  47,  45,  44,  43,  41,  42,  43,  45,  47,  49,  46,  46,  47,  44,  43,  45,  45,  42,  42,  42,  46,  48,  48,  47,  47,  48,  48,  46,  44,  43,  43,  43,  43,  42,  40,  39,  39,  38,  37,  38,  31,  29,  29,  27,  21,  14,  11,  19,  28,  31,  29,  25,  16,  12,  15,  15,  21,  27,  25,  23,  25,  27,  26,  24,  22,  20,  16,  14,  13,  13,  15,  15,  12,  10,   5,   5,   1,  -2,  -4,  -8, -10, -12, -13, -15, -18, -23, -27, -28, -29, -30, -30, -31, -32, -35, -29, -28, -30, -30, -31, -30, -26, -21, -24, -25, -30, -33, -33, -32, -34, -36, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -47, -48, -47, -44, -46, -44, -43, -43, -42, -40, -37, -36, -34, -31, -29, -26, -22, -17, -17, -15, -12,  -7,  -2,   2,   4,   8,  10,  13,  16,  19,  22,  24,  27,  30,  28,  28,  30,  33,  33,  34,  36,  40,  42,  41,  38,  31,  19,  16,  22,  22,  22,  21,  19,  16,  14,  12,  10,   8,   6,   5,   3,   2,   2,   0,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -10, -10, -12, -11, -11, -12, -11, -11, -11, -11, -10, -11, -11,
-  /*  37.0 */ -12, -12, -12, -13, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -18, -18, -20, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -37, -37, -37, -38, -39, -39, -39, -40, -40, -40, -40, -39, -39, -38, -37, -33, -33, -32, -27, -27, -28, -27, -27, -26, -23, -23, -23, -22, -21, -21, -19, -17, -17, -20, -23, -26, -28, -28, -29, -29, -30, -30, -31, -30, -30, -30, -31, -30, -29, -30, -31, -32, -32, -31, -32, -32, -32, -33, -33, -34, -36, -39, -39, -42, -43, -43, -43, -42, -42, -42, -40, -39, -37, -35, -34, -32, -31, -28, -28, -25, -24, -22, -19, -16, -13, -10,  -7,  -4,  -1,   2,   5,   9,  12,  16,  19,  23,  26,  29,  33,  36,  38,  42,  45,  47,  49,  51,  51,  51,  51,  52,  52,  52,  52,  49,  49,  49,  48,  47,  46,  46,  47,  47,  51,  52,  48,  46,  51,  49,  52,  52,  50,  47,  47,  48,  51,  50,  47,  46,  45,  44,  45,  45,  43,  43,  43,  43,  43,  42,  42,  42,  40,  38,  41,  31,  29,  28,  27,  23,  21,  25,  31,  36,  38,  37,  34,  30,  28,  29,  29,  33,  33,  32,  29,  30,  30,  27,  25,  23,  22,  19,  18,  19,  20,  17,  16,  12,   8,   5,  -3,  -7,  -9, -10, -10, -10, -11, -14, -17, -23, -28, -31, -33, -35, -37, -38, -41, -44, -45, -39, -33, -30, -29, -29, -31, -28, -28, -34, -42, -48, -51, -51, -51, -46, -42, -39, -42, -42, -44, -46, -46, -50, -56, -58, -57, -55, -54, -50, -47, -46, -44, -43, -43, -44, -42, -40, -37, -34, -31, -30, -25, -21, -16, -16, -16, -12,  -8,  -3,   0,   4,   7,  10,  13,  16,  19,  21,  23,  26,  29,  27,  28,  29,  31,  32,  33,  35,  37,  40,  42,  43,  39,  28,  16,  18,  22,  22,  20,  18,  16,  14,  11,  10,   8,   6,   4,   2,   1,   1,  -0,  -2,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -11, -13, -12, -13, -13, -12, -11, -11, -11, -11, -12, -12,
-  /*  38.0 */ -13, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -20, -21, -22, -22, -24, -25, -26, -27, -29, -30, -31, -33, -33, -35, -35, -36, -36, -37, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -37, -33, -32, -31, -26, -24, -25, -25, -25, -24, -23, -21, -19, -21, -20, -19, -17, -15, -16, -17, -21, -23, -25, -26, -27, -27, -29, -30, -32, -32, -33, -32, -32, -31, -30, -30, -31, -32, -34, -35, -34, -34, -33, -32, -32, -33, -34, -35, -37, -37, -39, -42, -42, -41, -41, -41, -41, -40, -38, -36, -34, -32, -30, -28, -28, -27, -24, -22, -20, -18, -15, -11,  -8,  -5,  -2,   1,   4,   7,   9,  13,  16,  20,  23,  27,  31,  34,  37,  39,  42,  45,  48,  51,  53,  54,  55,  56,  55,  55,  55,  55,  53,  52,  51,  50,  49,  48,  49,  47,  48,  49,  50,  48,  45,  44,  49,  53,  55,  55,  55,  52,  51,  51,  52,  50,  49,  47,  46,  45,  44,  44,  43,  42,  42,  43,  44,  43,  43,  44,  42,  42,  38,  31,  29,  25,  23,  25,  29,  36,  39,  39,  39,  38,  36,  36,  37,  37,  37,  36,  35,  36,  35,  34,  31,  28,  26,  23,  23,  24,  24,  20,  18,  16,  13,   5,  -8, -12, -12, -13, -16, -17, -16, -15, -19, -26, -29, -31, -33, -35, -36, -38, -38, -39, -43, -44, -41, -33, -30, -28, -28, -30, -33, -46, -52, -53, -54, -54, -55, -56, -56, -56, -55, -49, -45, -44, -48, -54, -59, -60, -58, -53, -48, -47, -47, -45, -44, -45, -46, -49, -47, -45, -42, -39, -36, -32, -30, -25, -20, -17, -16, -15, -13,  -9,  -5,  -1,   3,   7,  10,  13,  15,  18,  20,  23,  26,  26,  26,  27,  28,  29,  31,  31,  32,  36,  36,  38,  42,  41,  35,  24,  17,  21,  22,  21,  19,  16,  13,  12,  10,   8,   6,   4,   3,   1,  -0,  -2,  -3,  -4,  -4,  -5,  -7,  -9,  -9, -10, -11, -12, -10,  -8, -14, -13, -12, -11, -11, -11, -12, -13, -13,
-  /*  39.0 */ -13, -12, -13, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -21, -22, -22, -23, -24, -26, -27, -28, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -34, -30, -30, -27, -24, -25, -24, -22, -22, -21, -21, -20, -18, -18, -20, -18, -17, -14, -14, -16, -20, -22, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -32, -32, -32, -33, -35, -35, -35, -34, -35, -34, -32, -33, -34, -33, -35, -36, -37, -37, -39, -40, -39, -38, -38, -38, -37, -36, -33, -32, -31, -27, -27, -25, -24, -22, -19, -16, -13, -10,  -7,  -3,  -0,   2,   5,   8,  11,  14,  17,  20,  24,  27,  30,  33,  36,  39,  43,  45,  49,  52,  54,  56,  57,  58,  58,  58,  57,  56,  55,  54,  52,  51,  51,  49,  49,  49,  48,  49,  50,  51,  49,  49,  53,  54,  55,  55,  54,  54,  54,  53,  53,  52,  50,  49,  49,  47,  46,  45,  44,  44,  45,  46,  44,  43,  43,  43,  43,  43,  44,  37,  30,  29,  27,  28,  33,  38,  40,  40,  40,  40,  39,  40,  40,  39,  37,  37,  36,  36,  36,  34,  31,  30,  29,  28,  27,  26,  24,  21,  18,  14,  11,  -0, -12, -17, -17, -18, -21, -20, -19, -21, -24, -27, -29, -31, -33, -34, -36, -37, -38, -36, -35, -36, -36, -35, -33, -30, -30, -36, -47, -51, -52, -51, -51, -54, -57, -59, -60, -62, -63, -63, -63, -58, -55, -55, -56, -56, -52, -51, -49, -47, -46, -48, -52, -52, -52, -51, -48, -45, -42, -39, -36, -32, -28, -25, -19, -16, -14, -13, -12,  -9,  -5,  -1,   2,   6,  10,  13,  15,  17,  20,  23,  24,  23,  25,  25,  26,  28,  30,  31,  31,  33,  35,  37,  39,  41,  38,  25,  15,  20,  22,  21,  20,  18,  16,  13,  11,   9,   7,   5,   4,   2,   0,  -1,  -3,  -4,  -5,  -6,  -7,  -9,  -9, -10, -11, -13, -15, -13, -14, -13, -12, -12, -12, -12, -13, -13, -13,
-  /*  40.0 */ -13, -13, -12, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -13, -13, -13, -13, -14, -15, -16, -16, -17, -18, -20, -21, -22, -22, -24, -25, -26, -28, -28, -30, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -36, -36, -35, -34, -31, -28, -28, -23, -23, -23, -23, -21, -20, -19, -19, -19, -18, -16, -18, -17, -16, -13, -12, -17, -19, -21, -23, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -33, -33, -34, -35, -34, -34, -34, -35, -35, -34, -33, -35, -35, -35, -34, -34, -35, -35, -35, -35, -34, -34, -34, -34, -34, -33, -31, -30, -29, -27, -25, -23, -21, -18, -15, -12,  -9,  -6,  -2,   1,   4,   7,  10,  13,  16,  19,  23,  26,  29,  32,  35,  38,  41,  43,  46,  49,  52,  55,  57,  59,  59,  59,  60,  59,  58,  57,  56,  54,  54,  52,  51,  52,  51,  49,  48,  47,  46,  46,  46,  49,  54,  56,  55,  55,  54,  52,  52,  53,  52,  51,  50,  48,  49,  48,  45,  45,  44,  46,  48,  46,  44,  44,  44,  45,  46,  45,  38,  39,  34,  34,  36,  40,  40,  41,  40,  40,  40,  39,  38,  39,  39,  38,  37,  35,  34,  32,  30,  29,  30,  29,  29,  27,  26,  22,  20,  19,  11,   3,  -8, -16, -21, -18, -15, -16, -15, -18, -21, -24, -26, -28, -30, -33, -34, -35, -36, -37, -38, -39, -41, -41, -42, -40, -39, -35, -35, -41, -45, -46, -50, -56, -60, -62, -62, -64, -66, -67, -67, -66, -66, -67, -66, -64, -63, -62, -59, -56, -55, -57, -57, -55, -54, -53, -50, -47, -45, -43, -40, -36, -32, -29, -25, -20, -16, -13, -11, -10,  -8,  -4,  -1,   3,   5,   8,  11,  14,  17,  20,  24,  24,  23,  23,  24,  25,  26,  29,  30,  31,  31,  33,  34,  38,  40,  37,  24,  15,  17,  21,  21,  20,  18,  17,  15,  12,  10,   8,   6,   5,   3,   1,  -0,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -11, -13, -11, -15, -13, -12, -11, -12, -12, -13, -13, -12, -13,
-  /*  41.0 */ -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -33, -30, -25, -25, -23, -22, -21, -20, -19, -18, -17, -17, -17, -17, -14, -13, -14, -16, -12, -11, -15, -18, -20, -21, -22, -23, -24, -26, -27, -28, -30, -32, -32, -33, -33, -33, -33, -33, -34, -35, -34, -36, -35, -34, -34, -35, -33, -34, -34, -33, -34, -32, -31, -32, -32, -31, -31, -29, -28, -30, -31, -30, -29, -28, -27, -26, -24, -21, -19, -16, -13, -10,  -7,  -4,  -1,   3,   7,   9,  12,  16,  19,  21,  24,  27,  30,  34,  37,  40,  42,  45,  47,  50,  53,  55,  58,  59,  61,  61,  60,  60,  59,  58,  57,  56,  56,  54,  52,  52,  51,  51,  50,  49,  48,  48,  48,  49,  55,  56,  56,  56,  55,  54,  54,  53,  51,  50,  50,  49,  48,  46,  46,  45,  45,  46,  48,  47,  46,  46,  47,  48,  48,  48,  46,  40,  35,  37,  43,  44,  43,  42,  41,  41,  39,  38,  37,  36,  36,  36,  35,  34,  31,  28,  26,  25,  24,  24,  24,  25,  26,  23,  18,  11,   5,   5,  -6, -16, -16, -11, -12, -13, -14, -17, -21, -25, -27, -28, -30, -32, -33, -34, -36, -37, -40, -42, -44, -41, -45, -49, -44, -38, -34, -34, -33, -35, -44, -54, -59, -61, -63, -65, -66, -65, -64, -62, -62, -62, -64, -63, -61, -61, -60, -58, -56, -56, -56, -56, -55, -53, -50, -48, -46, -42, -40, -38, -33, -28, -24, -21, -17, -14, -11,  -8,  -7,  -3,   1,   3,   5,   7,  10,  14,  18,  21,  24,  26,  27,  24,  23,  24,  25,  26,  27,  28,  30,  30,  32,  35,  36,  29,  17,  11,  10,  16,  19,  19,  18,  17,  16,  14,  12,  10,   7,   6,   4,   2,   1,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -11, -12,  -7,  -8, -13, -11, -11, -12, -12, -12, -12, -12, -12,
-  /*  42.0 */ -11, -11, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -9,  -9, -10, -10, -10, -10, -11, -11, -12, -13, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -32, -32, -31, -31, -31, -31, -30, -30, -30, -27, -24, -23, -21, -20, -19, -18, -17, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -12, -14, -18, -19, -19, -21, -22, -24, -25, -25, -28, -29, -28, -32, -32, -33, -33, -34, -34, -34, -34, -34, -35, -36, -36, -35, -35, -33, -32, -33, -33, -31, -32, -30, -30, -29, -28, -28, -27, -26, -25, -27, -26, -26, -26, -26, -24, -23, -20, -17, -13, -10,  -8,  -6,  -1,   4,   5,   9,  12,  15,  18,  21,  24,  26,  29,  32,  35,  38,  42,  44,  46,  48,  51,  53,  56,  58,  60,  62,  61,  61,  61,  60,  60,  59,  58,  57,  57,  55,  54,  54,  53,  51,  51,  50,  51,  52,  53,  56,  56,  57,  57,  54,  54,  54,  52,  50,  50,  50,  51,  50,  47,  47,  46,  46,  46,  51,  47,  48,  48,  49,  48,  46,  47,  44,  39,  37,  41,  45,  44,  45,  43,  41,  40,  40,  38,  34,  30,  28,  27,  28,  29,  27,  25,  22,  20,  19,  19,  18,  20,  20,  19,  14,  12,   9,  -1,  -8, -11, -12, -11, -12, -14, -17, -20, -23, -25, -27, -28, -29, -31, -33, -34, -35, -39, -41, -43, -43, -40, -36, -38, -37, -36, -35, -37, -38, -38, -38, -39, -44, -52, -56, -56, -57, -60, -63, -62, -64, -63, -62, -63, -63, -63, -61, -58, -56, -56, -56, -55, -54, -53, -50, -48, -46, -43, -40, -36, -33, -29, -26, -23, -19, -16, -11,  -7,  -5,  -2,   0,   2,   4,   6,   8,  13,  18,  21,  23,  25,  26,  25,  23,  23,  24,  25,  26,  27,  28,  29,  30,  35,  33,  22,  21,  15,  11,   9,  10,  14,  16,  17,  16,  15,  13,  11,   9,   7,   5,   3,   2,  -0,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -12, -10, -11, -13, -11, -11, -11, -12, -12, -11, -11, -11,
-  /*  43.0 */ -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -30, -31, -30, -30, -30, -29, -29, -29, -29, -24, -23, -21, -20, -19, -18, -18, -16, -16, -15, -14, -13, -12, -11, -10, -10, -14, -12, -14, -15, -15, -18, -19, -21, -24, -26, -27, -26, -27, -29, -29, -30, -31, -32, -34, -35, -35, -35, -34, -34, -34, -35, -36, -36, -37, -36, -35, -35, -34, -32, -32, -29, -28, -27, -27, -27, -26, -24, -25, -23, -22, -22, -21, -21, -20, -20, -18, -14, -10,  -8,  -7,  -2,   4,  10,  13,  16,  17,  19,  20,  23,  26,  29,  31,  34,  37,  40,  43,  45,  47,  50,  52,  54,  56,  59,  61,  62,  62,  62,  62,  62,  62,  62,  61,  60,  58,  58,  58,  57,  56,  53,  51,  52,  55,  53,  54,  55,  57,  56,  56,  55,  54,  51,  50,  51,  52,  52,  51,  50,  50,  49,  48,  46,  46,  47,  49,  49,  48,  47,  43,  43,  43,  43,  43,  44,  46,  45,  44,  44,  42,  41,  40,  38,  36,  31,  29,  28,  26,  23,  21,  20,  19,  20,  18,  15,  17,  22,  23,  22,  17,  12,   5,  -1,  -6,  -8,  -9, -10, -12, -14, -17, -19, -20, -23, -25, -27, -28, -29, -32, -32, -34, -37, -39, -41, -42, -42, -40, -41, -41, -42, -44, -43, -42, -41, -42, -44, -47, -46, -48, -49, -51, -48, -49, -53, -62, -65, -63, -64, -64, -62, -57, -57, -60, -57, -56, -55, -53, -52, -50, -49, -46, -44, -43, -40, -38, -34, -31, -28, -25, -22, -18, -13,  -8,  -4,  -2,  -1,   1,   3,   5,   8,  11,  15,  19,  21,  22,  24,  25,  25,  26,  26,  27,  26,  26,  27,  28,  29,  32,  33,  30,  31,  28,  28,  21,  11,   3,   6,  12,  15,  14,  14,  12,  11,   9,   7,   5,   3,   1,   0,  -2,  -3,  -5,  -5,  -6,  -7,  -8, -11,  -8, -10, -11,  -9, -10, -11, -11, -10, -10, -10, -10,
-  /*  44.0 */  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -9,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -28, -28, -29, -28, -23, -22, -21, -19, -18, -18, -17, -17, -15, -13, -11, -11, -11,  -9,  -8, -10, -13, -10, -15, -15, -13, -17, -20, -23, -25, -25, -26, -26, -27, -28, -29, -29, -31, -33, -36, -37, -36, -36, -34, -34, -36, -35, -36, -36, -37, -37, -37, -36, -34, -31, -29, -29, -28, -27, -27, -26, -24, -24, -23, -23, -23, -21, -19, -18, -15, -13, -12, -11,  -9,  -7,  -3,   3,   8,  12,  16,  17,  18,  20,  23,  25,  28,  30,  33,  35,  38,  40,  44,  46,  48,  51,  53,  55,  57,  59,  61,  63,  64,  64,  64,  64,  63,  63,  63,  61,  60,  58,  58,  58,  56,  55,  55,  53,  50,  47,  47,  51,  51,  49,  48,  50,  46,  47,  49,  49,  49,  49,  51,  52,  51,  50,  51,  52,  49,  46,  46,  45,  42,  41,  42,  43,  44,  46,  47,  46,  45,  44,  43,  40,  40,  39,  37,  36,  35,  33,  32,  29,  25,  22,  20,  17,  17,  15,  13,  16,  21,  20,  18,  14,   7,   2,  -2,  -5,  -7,  -9, -11, -12, -13, -15, -16, -18, -20, -23, -25, -27, -29, -30, -32, -34, -36, -37, -38, -39, -38, -39, -41, -42, -44, -44, -45, -45, -46, -47, -47, -49, -49, -51, -51, -52, -52, -56, -61, -66, -64, -60, -61, -60, -58, -59, -60, -62, -58, -56, -54, -53, -52, -51, -49, -47, -46, -44, -42, -40, -37, -35, -32, -28, -25, -22, -18, -14, -10,  -6,  -4,  -2,   0,   2,   4,   7,   9,  13,  16,  19,  20,  22,  25,  25,  24,  25,  25,  27,  27,  26,  27,  28,  30,  31,  31,  32,  31,  31,  31,  30,  19,   2,  -3,   2,   9,  11,  12,  11,  10,   8,   6,   4,   3,   2,  -0,  -1,  -3,  -4,  -5,  -5,  -8, -11,  -8, -11, -10,  -9,  -9, -10,  -9,  -9,  -9,  -8,  -8,
-  /*  45.0 */  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -24, -25, -26, -26, -27, -27, -28, -28, -28, -27, -26, -27, -26, -27, -27, -27, -23, -22, -20, -20, -19, -17, -16, -15, -15, -14, -13, -11,  -9,  -9,  -7, -12, -11, -14, -15, -15, -15, -17, -20, -22, -23, -24, -25, -25, -27, -27, -28, -28, -31, -31, -34, -36, -37, -37, -36, -35, -36, -37, -37, -37, -37, -36, -35, -34, -34, -32, -30, -30, -28, -27, -26, -26, -25, -24, -23, -22, -21, -20, -18, -17, -15, -13, -10,  -7,  -4,  -2,   3,   6,  10,  14,  17,  19,  21,  23,  26,  28,  30,  32,  34,  37,  39,  42,  44,  46,  49,  51,  53,  55,  57,  60,  61,  63,  65,  65,  65,  65,  64,  64,  63,  62,  61,  59,  59,  59,  59,  57,  55,  56,  54,  53,  51,  48,  46,  46,  45,  45,  44,  47,  48,  47,  47,  49,  51,  53,  53,  51,  52,  53,  45,  42,  39,  41,  43,  43,  44,  46,  46,  46,  46,  45,  44,  43,  43,  42,  38,  37,  34,  32,  33,  32,  31,  29,  27,  26,  26,  22,  18,  16,  14,  13,  13,  13,  11,   8,   4,   1,  -2,  -4,  -6,  -9, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -35, -37, -38, -38, -39, -41, -42, -43, -44, -44, -45, -47, -48, -50, -49, -45, -40, -44, -52, -56, -58, -63, -66, -67, -65, -61, -59, -57, -57, -57, -56, -53, -53, -51, -49, -49, -49, -49, -47, -47, -46, -44, -42, -40, -37, -34, -32, -29, -26, -22, -18, -15, -12,  -8,  -5,  -2,   0,   2,   4,   6,   8,  11,  14,  16,  18,  20,  23,  24,  23,  24,  25,  29,  30,  26,  26,  27,  28,  29,  28,  28,  27,  26,  26,  26,  28,  24,  14,   1,  -4,   3,  10,  12,  11,  10,   8,   6,   5,   3,   2,  -0,  -2,  -3,  -4,  -5,  -7, -10,  -3, -10,  -9,  -8,  -9,  -7,  -8,  -7,  -7,  -7,  -6,
-  /*  46.0 */  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,  -0,  -1,  -1,  -0,  -0,  -1,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -25, -26, -26, -26, -26, -25, -25, -25, -25, -25, -26, -26, -23, -20, -20, -20, -20, -21, -18, -16, -16, -15, -13, -12, -12, -11, -11, -13, -14, -15, -16, -16, -16, -16, -19, -21, -22, -24, -25, -26, -27, -27, -27, -28, -28, -30, -31, -32, -34, -35, -36, -36, -37, -38, -38, -38, -37, -37, -36, -35, -34, -33, -33, -32, -29, -28, -26, -25, -25, -24, -22, -20, -19, -18, -17, -15, -13, -12,  -9,  -6,  -2,   1,   4,   7,  10,  14,  18,  20,  24,  26,  29,  29,  31,  33,  35,  38,  40,  42,  45,  47,  49,  52,  53,  55,  57,  60,  61,  63,  65,  66,  66,  66,  65,  64,  63,  61,  61,  61,  60,  59,  59,  57,  55,  54,  52,  50,  49,  48,  47,  47,  47,  46,  48,  49,  48,  48,  48,  49,  50,  50,  50,  49,  49,  51,  52,  48,  49,  49,  48,  45,  47,  47,  46,  45,  45,  45,  44,  43,  42,  42,  41,  39,  37,  32,  31,  31,  29,  27,  25,  23,  22,  20,  17,  15,  13,  12,  11,   9,   7,   6,   3,   1,  -1,  -4,  -6,  -8, -10, -12, -15, -16, -18, -20, -22, -24, -26, -27, -29, -30, -31, -33, -35, -36, -37, -38, -39, -41, -41, -42, -43, -44, -44, -46, -48, -50, -51, -51, -51, -50, -52, -51, -51, -56, -60, -61, -60, -58, -54, -53, -51, -50, -49, -52, -50, -49, -49, -49, -48, -46, -45, -45, -44, -42, -41, -39, -36, -34, -32, -28, -25, -22, -19, -16, -13, -11,  -7,  -3,   0,   2,   4,   5,   7,  10,  12,  14,  17,  19,  20,  21,  22,  22,  24,  27,  29,  29,  26,  25,  26,  26,  26,  26,  24,  23,  23,  23,  23,  24,  25,  24,  17,   7,   4,  10,  12,  12,  10,   9,   7,   5,   3,   1,  -1,  -2,  -3,  -4,  -7,  -4,  -5,  -9,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,
-  /*  47.0 */  -3,  -3,  -2,  -1,  -1,  -1,   0,   0,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   1,   0,  -0,  -1,  -2,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -13, -14, -15, -16, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -23, -23, -23, -24, -24, -25, -24, -23, -21, -20, -18, -20, -20, -19, -17, -16, -15, -14, -13, -13, -12, -12, -12, -14, -15, -16, -16, -16, -17, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -29, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -31, -29, -28, -28, -26, -24, -22, -21, -20, -19, -18, -17, -15, -14, -11,  -8,  -4,  -0,   3,   6,   8,  11,  15,  17,  21,  25,  28,  32,  35,  36,  35,  36,  38,  41,  44,  46,  48,  50,  52,  54,  56,  57,  60,  62,  63,  65,  66,  66,  66,  65,  64,  62,  62,  62,  61,  60,  59,  58,  57,  56,  55,  53,  50,  50,  50,  49,  48,  48,  50,  50,  49,  49,  48,  48,  48,  48,  48,  48,  48,  50,  49,  48,  48,  49,  50,  50,  49,  48,  48,  47,  45,  45,  44,  43,  42,  42,  41,  39,  39,  36,  33,  33,  31,  29,  28,  25,  24,  22,  21,  20,  18,  15,  14,  11,   9,   7,   5,   2,  -1,  -4,  -6,  -8, -11, -14, -15, -16, -18, -19, -20, -21, -22, -23, -25, -27, -29, -30, -32, -34, -35, -35, -36, -37, -39, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -49, -49, -49, -48, -47, -47, -48, -53, -54, -51, -47, -43, -45, -47, -49, -49, -48, -47, -46, -45, -44, -43, -44, -44, -43, -42, -40, -38, -35, -33, -31, -28, -26, -23, -20, -17, -15, -12,  -8,  -4,  -1,   2,   4,   5,   7,   9,  12,  13,  16,  18,  19,  20,  20,  21,  23,  25,  26,  28,  27,  25,  24,  24,  25,  25,  22,  21,  20,  21,  21,  21,  22,  23,  25,  24,  16,   4,  10,  12,  12,  10,   9,   7,   5,   3,   1,   0,  -1,  -3,  -7,  -3,  -4,  -6,  -5,  -4,  -5,  -5,  -4,  -4,  -4,  -3,  -3,
-  /*  48.0 */  -1,  -0,  -0,   1,   1,   1,   2,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   2,   1,   1,  -0,  -1,  -2,  -3,  -4,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -20, -20, -22, -18, -18, -18, -17, -17, -16, -15, -15, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -18, -21, -22, -24, -25, -27, -27, -28, -29, -31, -32, -31, -33, -35, -35, -36, -37, -37, -37, -37, -38, -38, -38, -38, -38, -36, -35, -33, -33, -32, -30, -28, -28, -27, -24, -22, -21, -20, -19, -18, -17, -16, -14,  -9,  -4,  -2,   2,   5,   8,   9,  13,  17,  21,  25,  27,  29,  32,  35,  36,  36,  37,  40,  42,  44,  46,  49,  51,  52,  54,  56,  58,  60,  62,  63,  65,  66,  65,  65,  64,  63,  63,  63,  62,  62,  61,  60,  58,  57,  56,  55,  54,  53,  52,  52,  53,  54,  52,  51,  51,  50,  49,  48,  47,  46,  46,  46,  46,  47,  48,  49,  49,  48,  47,  46,  45,  45,  45,  46,  46,  44,  44,  44,  43,  41,  40,  39,  38,  36,  34,  34,  33,  31,  30,  28,  25,  24,  22,  21,  20,  18,  16,  14,  12,   9,   7,   4,   1,  -3,  -5,  -9, -12, -13, -14, -16, -17, -18, -19, -20, -22, -21, -20, -22, -24, -27, -29, -31, -33, -33, -33, -34, -35, -36, -38, -40, -41, -41, -42, -43, -43, -43, -43, -43, -45, -46, -47, -50, -51, -51, -51, -49, -46, -43, -42, -44, -48, -49, -49, -48, -47, -46, -44, -44, -44, -44, -44, -43, -43, -41, -40, -37, -34, -32, -30, -28, -26, -23, -21, -18, -16, -13,  -9,  -6,  -2,   2,   3,   5,   7,   9,  11,  14,  16,  17,  18,  19,  19,  20,  21,  22,  23,  25,  26,  26,  24,  22,  24,  23,  22,  22,  20,  20,  20,  20,  20,  21,  21,  24,  25,  15,   2,   7,  10,  10,   9,   8,   6,   5,   3,   2,   1,  -2,  -4,  -0,  -6,  -3,  -2,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,
-  /*  49.0 */   0,   1,   1,   2,   2,   3,   4,   4,   5,   6,   6,   6,   6,   7,   7,   7,   7,   6,   6,   5,   5,   5,   4,   3,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -22, -21, -20, -17, -17, -21, -19, -17, -16, -16, -16, -16, -15, -15, -15, -14, -15, -15, -16, -16, -17, -17, -17, -18, -19, -19, -20, -21, -22, -23, -25, -27, -28, -29, -31, -32, -33, -34, -35, -36, -37, -38, -38, -39, -39, -38, -38, -39, -39, -39, -39, -38, -37, -36, -35, -34, -33, -30, -27, -27, -26, -24, -20, -19, -20, -20, -18, -16, -14, -10,  -3,   2,   5,   7,   9,  12,  15,  22,  24,  22,  23,  26,  29,  33,  35,  37,  39,  41,  43,  45,  47,  50,  52,  53,  55,  56,  58,  60,  62,  64,  65,  65,  64,  64,  64,  63,  63,  63,  62,  61,  60,  59,  58,  57,  56,  56,  58,  58,  58,  56,  55,  54,  53,  52,  51,  50,  49,  48,  47,  46,  45,  45,  45,  47,  47,  48,  48,  48,  48,  47,  46,  47,  47,  46,  46,  43,  43,  43,  43,  41,  39,  37,  33,  32,  34,  34,  33,  31,  28,  26,  23,  23,  21,  19,  17,  15,  13,  10,  10,   9,   7,   5,   1,  -3,  -5,  -7,  -9, -12, -14, -15, -16, -16, -16, -19, -21, -22, -20, -19, -22, -24, -27, -29, -31, -31, -31, -32, -33, -34, -35, -37, -38, -39, -40, -40, -40, -40, -40, -42, -44, -45, -45, -46, -47, -44, -44, -42, -41, -42, -43, -44, -46, -47, -46, -46, -45, -45, -45, -44, -43, -43, -42, -42, -41, -40, -39, -37, -34, -32, -30, -28, -25, -23, -21, -19, -16, -13, -10,  -7,  -3,   0,   3,   5,   7,   9,  11,  13,  14,  16,  16,  18,  19,  20,  20,  21,  21,  23,  24,  24,  23,  21,  22,  22,  21,  21,  20,  20,  20,  20,  21,  21,  21,  22,  25,  25,  12,   1,   4,   8,   9,   9,   8,   7,   5,   4,   2,  -1,   1,   1,  -2,   0,   0,  -0,  -0,   0,  -0,   0,   0,   0,   0,
-  /*  50.0 */  -6,  -6,  -5,  -4,  -2,  -1,   1,   2,   3,   5,   5,   7,   7,   8,   8,   9,   9,   8,   8,   8,   7,   7,   7,   6,   5,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -5,  -7,  -8,  -9, -10, -12, -13, -14, -15, -16, -17, -17, -17, -18, -18, -18, -20, -20, -16, -15, -17, -17, -17, -17, -16, -16, -16, -16, -16, -15, -14, -16, -17, -18, -17, -17, -17, -17, -19, -19, -19, -20, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -33, -34, -35, -35, -36, -38, -39, -39, -40, -40, -39, -39, -39, -40, -40, -40, -39, -38, -36, -35, -33, -31, -29, -26, -25, -24, -24, -23, -23, -21, -19, -18, -16, -13, -10,  -5,   1,   4,   8,  11,  13,  16,  22,  24,  23,  23,  26,  29,  32,  35,  38,  40,  42,  45,  47,  49,  51,  53,  54,  56,  57,  59,  61,  62,  63,  64,  64,  64,  63,  63,  63,  63,  63,  62,  61,  60,  58,  58,  57,  56,  57,  57,  59,  58,  58,  56,  55,  54,  53,  52,  50,  48,  46,  45,  45,  45,  45,  46,  47,  48,  49,  48,  48,  48,  47,  47,  47,  46,  45,  44,  44,  43,  42,  40,  37,  35,  33,  31,  32,  32,  32,  31,  29,  27,  25,  23,  21,  19,  16,  14,  12,  11,  11,  11,  10,   8,   5,   3,   0,  -5,  -7,  -8, -10, -12, -14, -15, -15, -16, -17, -20, -21, -18, -17, -19, -22, -24, -26, -28, -29, -29, -30, -31, -32, -33, -34, -35, -35, -36, -38, -39, -40, -42, -44, -45, -45, -45, -44, -43, -43, -41, -41, -40, -41, -42, -42, -45, -46, -46, -46, -45, -43, -43, -42, -42, -41, -41, -40, -40, -40, -39, -37, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -11,  -8,  -5,  -1,   3,   5,   7,   9,  11,  12,  12,  13,  15,  17,  19,  20,  21,  21,  20,  21,  22,  23,  22,  21,  21,  22,  21,  19,  19,  19,  19,  20,  20,  21,  21,  22,  22,  24,  24,  16,   5,   2,   6,   8,   8,   8,   7,   5,   4,   3,   4,   1,   3,   2,   2,   1,   1,   1,   1,  -1,  -3,  -5,  -6,
-  /*  51.0 */  -8,  -6,  -7,  -8, -10, -11, -11, -10,  -7,  -5,  -2,   2,   5,   8,   9,  10,  10,  10,  10,  10,  10,  10,   9,   8,   7,   7,   6,   5,   4,   3,   3,   2,   1,  -0,  -1,  -3,  -3,  -5,  -6,  -8,  -9, -10, -11, -13, -14, -14, -15, -15, -16, -17, -17, -16, -15, -15, -15, -15, -14, -14, -15, -15, -16, -16, -16, -16, -14, -13, -17, -18, -19, -19, -19, -20, -20, -21, -21, -21, -21, -22, -23, -25, -27, -28, -30, -31, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -40, -40, -41, -42, -41, -41, -42, -42, -41, -39, -37, -36, -34, -33, -32, -29, -26, -24, -22, -21, -20, -19, -18, -17, -15, -13, -10,  -8,  -5,  -2,   3,   9,  11,  14,  16,  20,  24,  24,  25,  27,  31,  34,  36,  39,  41,  43,  45,  48,  50,  52,  53,  55,  57,  58,  59,  61,  62,  63,  63,  63,  63,  63,  63,  63,  63,  62,  62,  60,  59,  58,  57,  59,  60,  58,  59,  60,  59,  58,  56,  55,  54,  54,  53,  51,  48,  46,  45,  45,  44,  45,  45,  45,  46,  47,  48,  48,  47,  46,  46,  44,  44,  43,  42,  41,  39,  38,  37,  36,  34,  31,  30,  30,  30,  30,  28,  25,  25,  25,  23,  20,  18,  16,  14,  13,  12,  11,  10,   9,   7,   6,   5,   3,  -1,  -4,  -6,  -8, -10, -11, -13, -14, -15, -17, -18, -18, -16, -16, -18, -20, -23, -24, -26, -27, -27, -28, -29, -30, -31, -32, -33, -35, -36, -38, -39, -40, -41, -42, -43, -43, -42, -42, -41, -41, -41, -40, -40, -40, -41, -42, -43, -43, -43, -43, -43, -43, -42, -40, -40, -39, -38, -38, -38, -38, -39, -37, -34, -32, -29, -27, -25, -23, -21, -19, -16, -14, -11,  -8,  -5,  -2,   2,   4,   6,   8,   9,  10,  11,  12,  14,  16,  17,  18,  20,  20,  20,  19,  20,  21,  21,  20,  19,  20,  18,  17,  17,  18,  18,  18,  19,  19,  20,  22,  23,  23,  25,  25,  20,   6,   1,   5,   7,   8,   8,   8,   6,   6,   6,   5,   4,   3,   1,  -1,  -4,  -5,  -9, -10,  -8,  -5,  -8,
-  /*  52.0 */   4,   2,   4,   5,   7,   8,   7,   6,   6,   3,   2,  -2,  -3,  -0,   2,   6,   8,  10,  11,  11,  11,  11,  11,  10,  10,   9,   9,   8,   7,   7,   6,   5,   4,   2,   1,   0,  -1,  -2,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -12, -13, -14, -13, -14, -14, -14, -14, -13, -12, -13, -14, -14, -14, -15, -15, -15, -13, -12, -15, -18, -19, -20, -20, -20, -20, -21, -22, -22, -22, -23, -24, -24, -27, -30, -31, -32, -33, -33, -33, -34, -35, -36, -37, -39, -41, -42, -43, -43, -42, -43, -43, -43, -43, -44, -43, -42, -40, -39, -36, -34, -33, -31, -30, -28, -26, -23, -20, -18, -17, -16, -15, -13, -10,  -8,  -5,  -1,   2,   4,   9,  12,  15,  17,  21,  22,  24,  26,  29,  32,  34,  36,  39,  42,  45,  47,  49,  50,  52,  54,  56,  57,  58,  60,  61,  61,  62,  62,  62,  62,  62,  62,  62,  62,  61,  61,  59,  58,  57,  58,  61,  61,  60,  60,  59,  58,  58,  56,  56,  55,  54,  54,  52,  49,  48,  46,  45,  45,  44,  44,  43,  44,  44,  45,  45,  44,  44,  43,  42,  41,  40,  39,  37,  35,  33,  33,  32,  30,  29,  28,  28,  27,  26,  24,  21,  22,  23,  21,  20,  18,  16,  14,  13,  12,  11,  10,   8,   7,   7,   6,   4,   2,  -0,  -1,  -3,  -4,  -6,  -7,  -8,  -9, -12, -14, -14, -13, -13, -16, -18, -21, -23, -25, -25, -25, -26, -27, -28, -29, -30, -31, -33, -34, -36, -37, -39, -40, -41, -41, -41, -42, -43, -44, -43, -43, -42, -41, -39, -39, -40, -41, -42, -43, -41, -40, -40, -39, -38, -37, -37, -38, -38, -39, -40, -39, -36, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -12,  -9,  -7,  -4,  -0,   2,   4,   6,   7,   8,   9,  11,  12,  14,  16,  18,  19,  19,  18,  18,  19,  20,  20,  19,  19,  18,  18,  16,  16,  17,  18,  19,  19,  20,  20,  21,  22,  23,  24,  24,  24,  12,   2,  -1,   3,   7,   8,   9,   9,   8,   6,   3,   1,  -3,  -6,  -2,   1,   5,   6,   4,   6,   6,   4,
-  /*  53.0 */   5,   2,   2,   2,   3,   3,   5,   6,   8,  10,  13,  14,  14,  10,   4,   0,   0,   2,   4,   7,   9,  10,  11,  11,  12,  11,  11,  10,   9,   8,   7,   6,   6,   5,   3,   2,   1,  -0,  -2,  -3,  -5,  -6,  -7,  -8,  -9,  -9, -11, -12,  -9, -11, -12, -12, -13, -12, -11, -12, -12, -13, -13, -14, -14, -15, -14, -15, -16, -18, -20, -21, -22, -22, -22, -22, -22, -23, -24, -24, -25, -26, -27, -28, -30, -32, -33, -34, -34, -35, -36, -38, -39, -40, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -43, -41, -39, -37, -34, -32, -30, -29, -27, -25, -23, -22, -19, -18, -16, -15, -14, -10,  -7,  -3,  -0,   4,   7,  10,  13,  15,  19,  21,  23,  25,  28,  31,  34,  36,  39,  41,  44,  45,  47,  50,  51,  54,  56,  58,  59,  59,  60,  60,  60,  60,  61,  61,  61,  61,  61,  60,  60,  60,  60,  60,  60,  59,  59,  60,  61,  60,  61,  60,  59,  58,  57,  56,  56,  55,  55,  53,  51,  49,  46,  45,  44,  43,  42,  42,  42,  41,  41,  41,  41,  41,  40,  39,  37,  36,  34,  33,  31,  30,  31,  30,  29,  28,  28,  27,  26,  24,  22,  20,  19,  19,  18,  17,  17,  16,  14,  12,  11,  10,   9,   8,   8,   7,   5,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -6,  -9, -11, -12, -11, -12, -15, -17, -19, -20, -23, -24, -24, -25, -26, -27, -28, -29, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -41, -40, -39, -39, -40, -41, -41, -40, -40, -40, -39, -38, -37, -36, -36, -37, -38, -38, -37, -36, -35, -35, -34, -31, -29, -27, -25, -23, -20, -19, -17, -15, -12, -10,  -8,  -6,  -4,  -2,   0,   2,   5,   6,   8,   9,  11,  13,  15,  17,  18,  18,  17,  18,  18,  18,  19,  19,  18,  18,  17,  16,  16,  17,  18,  18,  18,  19,  20,  21,  21,  23,  23,  24,  24,  21,  17,   5,  -3,   1,   8,  10,   9,   5,   1,  -3,  -0,   3,   5,   7,   5,   2,   2,   1,   1,   2,   5,
-  /*  54.0 */   5,  -0,   2,   3,   4,   4,   5,   6,   7,   8,  10,  11,  13,  15,  18,  18,  16,  13,   8,   7,   8,   8,   8,   8,   9,  10,  11,  11,  11,  10,  11,  10,   9,   7,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -9,  -6,  -8,  -9,  -9, -10, -10, -10, -11, -12, -12, -13, -14, -14, -14, -15, -15, -16, -18, -19, -20, -22, -23, -23, -24, -25, -25, -26, -26, -26, -27, -29, -30, -30, -31, -32, -34, -36, -37, -38, -39, -39, -40, -42, -43, -44, -45, -46, -46, -46, -45, -45, -45, -44, -44, -43, -42, -41, -39, -37, -35, -32, -31, -29, -27, -24, -23, -21, -20, -18, -18, -16, -15, -13,  -9,  -5,  -1,   2,   6,  11,  14,  16,  18,  21,  24,  27,  30,  32,  35,  38,  40,  42,  44,  47,  49,  51,  53,  55,  58,  59,  60,  60,  60,  60,  60,  61,  61,  61,  61,  61,  61,  60,  60,  60,  61,  61,  61,  60,  59,  58,  58,  58,  59,  59,  59,  58,  58,  57,  56,  55,  54,  53,  51,  48,  46,  44,  43,  41,  41,  41,  40,  40,  39,  39,  40,  39,  39,  37,  36,  35,  34,  32,  30,  29,  29,  29,  28,  28,  27,  26,  25,  24,  23,  21,  20,  18,  17,  17,  16,  16,  15,  13,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   3,   2,   0,   0,  -1,  -3,  -5,  -8, -10, -11, -10, -10, -12, -14, -17, -18, -20, -22, -23, -24, -26, -27, -27, -28, -30, -31, -33, -34, -36, -37, -38, -38, -39, -39, -39, -39, -40, -39, -39, -40, -38, -36, -37, -39, -40, -39, -39, -38, -37, -36, -36, -37, -39, -40, -39, -38, -36, -34, -34, -33, -32, -33, -31, -27, -24, -22, -21, -19, -17, -15, -13, -11,  -9,  -8,  -6,  -4,  -2,   1,   4,   5,   7,   8,  10,  12,  13,  14,  16,  17,  16,  16,  17,  17,  18,  17,  16,  17,  17,  15,  16,  17,  18,  18,  19,  19,  20,  20,  20,  22,  22,  24,  25,  24,  22,  14,   5,  -1,   4,   6,   2,   0,   2,   4,   4,   3,   2,   2,   2,   3,   3,   2,   2,   4,   5,
-  /*  55.0 */  -1,   1,   2,   3,   4,   5,   5,   6,   6,   7,   9,  10,  12,  14,  14,  16,  17,  17,  17,  18,  17,  16,  14,  13,  12,  10,   9,  10,  12,  12,  11,   9,   8,   7,   7,   6,   5,   3,   2,   1,   0,  -1,  -2,  -3,  -5,  -7,  -4,  -4,  -5,  -6,  -7,  -8,  -8,  -9,  -9, -10, -11, -12, -12, -14, -15, -16, -17, -17, -18, -19, -20, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -31, -31, -32, -33, -34, -35, -37, -39, -40, -41, -42, -42, -43, -45, -46, -46, -47, -47, -46, -45, -45, -45, -44, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -26, -24, -23, -20, -17, -16, -15, -13, -12, -11,  -8,  -4,  -1,   3,   8,  13,  15,  16,  18,  22,  25,  28,  31,  34,  37,  39,  41,  43,  45,  47,  50,  52,  54,  56,  58,  60,  60,  60,  60,  60,  60,  60,  61,  61,  61,  61,  61,  60,  60,  60,  61,  62,  62,  60,  58,  58,  57,  56,  56,  56,  58,  58,  58,  57,  56,  55,  54,  53,  51,  48,  46,  44,  43,  42,  42,  41,  41,  40,  41,  40,  40,  39,  37,  36,  34,  34,  33,  31,  29,  28,  27,  26,  25,  25,  25,  24,  23,  22,  21,  20,  19,  19,  17,  17,  16,  16,  15,  15,  14,  12,  11,  10,   9,   7,   6,   6,   6,   5,   4,   3,   2,   1,  -0,  -2,  -4,  -6,  -8, -10,  -9,  -9, -10, -12, -14, -17, -18, -20, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -35, -36, -36, -36, -36, -37, -37, -37, -38, -37, -35, -36, -38, -38, -38, -38, -37, -38, -38, -38, -38, -40, -40, -40, -39, -37, -35, -34, -33, -32, -32, -32, -30, -26, -25, -23, -20, -18, -17, -15, -13, -11,  -9,  -8,  -6,  -4,  -2,   0,   2,   4,   5,   7,   9,  12,  13,  14,  14,  15,  15,  15,  16,  16,  16,  15,  16,  16,  16,  16,  17,  18,  18,  19,  19,  20,  20,  20,  20,  21,  21,  24,  25,  23,  22,  20,  14,   1,  -1,   1,   8,  14,   9,   7,   5,   2,   2,   2,  -0,  -2,   1,   4,   4,   2,  -1,
-  /*  56.0 */   2,   2,   3,   3,   3,   3,   3,   4,   5,   8,  10,  12,  13,  13,  14,  14,  15,  15,  15,  16,  17,  16,  14,  13,  12,  13,  14,  11,   7,   6,   7,   8,   9,   9,   8,   8,   6,   6,   5,   3,   2,   1,  -1,  -2,  -4,  -1,  -0,  -1,  -2,  -2,  -3,  -6,  -7,  -7,  -8,  -8, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -23, -24, -25, -27, -28, -29, -29, -29, -30, -31, -31, -32, -33, -34, -35, -37, -38, -40, -41, -42, -43, -44, -45, -46, -48, -47, -48, -48, -48, -47, -47, -46, -45, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -27, -26, -25, -21, -17, -15, -13, -11, -10,  -9,  -6,  -0,   5,   6,   8,  11,  14,  17,  20,  23,  26,  28,  31,  34,  37,  39,  41,  43,  45,  47,  49,  52,  54,  56,  58,  60,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  62,  63,  63,  61,  61,  61,  61,  62,  62,  60,  58,  57,  55,  56,  57,  58,  58,  57,  56,  55,  54,  52,  50,  48,  47,  45,  45,  44,  43,  42,  42,  41,  41,  40,  39,  38,  37,  36,  35,  33,  32,  30,  28,  26,  25,  25,  24,  23,  23,  22,  21,  21,  20,  19,  19,  17,  17,  17,  17,  16,  15,  15,  14,  13,  12,  10,   9,   8,   8,   7,   6,   6,   5,   4,   3,   1,  -1,  -2,  -5,  -6,  -7,  -7,  -7,  -8,  -8, -10, -13, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -30, -31, -31, -32, -34, -34, -35, -35, -35, -35, -36, -36, -36, -36, -36, -37, -38, -38, -38, -38, -39, -39, -39, -40, -41, -41, -41, -40, -39, -38, -37, -36, -34, -34, -33, -32, -29, -28, -27, -26, -24, -22, -20, -18, -15, -11, -10,  -9,  -8,  -7,  -4,  -2,  -0,   2,   4,   6,   8,  10,  11,  12,  13,  13,  14,  15,  15,  15,  15,  14,  14,  15,  15,  16,  17,  18,  18,  18,  19,  19,  19,  18,  18,  18,  20,  21,  22,  24,  23,  21,  19,  15,  11,   7,   8,   9,   8,   8,   7,   6,   4,   2,   3,   1,   1,  -0,  -0,  -0,   1,   2,
-  /*  57.0 */   2,   2,   2,   3,   3,   2,   5,  10,  11,  11,  12,  12,  12,  13,  13,  14,  15,  15,  15,  15,  14,  15,  16,  15,  12,  12,  13,  14,  15,  14,  11,   8,   7,   8,   8,   8,   7,   6,   5,   4,   3,   1,   0,  -1,   1,   2,   1,   1,   1,   1,  -2,  -3,  -4,  -5,  -6,  -8,  -8, -10, -12, -13, -14, -15, -17, -19, -20, -22, -22, -23, -25, -26, -28, -29, -29, -30, -30, -31, -32, -33, -34, -35, -36, -38, -39, -41, -42, -43, -45, -46, -47, -47, -48, -48, -49, -49, -48, -48, -48, -48, -47, -45, -44, -44, -42, -41, -39, -37, -35, -33, -31, -29, -28, -27, -23, -20, -16, -13, -11, -10,  -9,  -7,  -1,   4,   6,   8,  11,  13,  16,  18,  21,  24,  27,  29,  32,  34,  37,  39,  42,  44,  46,  47,  49,  51,  53,  55,  57,  60,  61,  62,  62,  62,  62,  61,  61,  61,  61,  61,  61,  61,  62,  62,  61,  60,  60,  60,  60,  60,  60,  57,  55,  56,  56,  58,  58,  57,  56,  55,  54,  52,  50,  48,  47,  46,  46,  44,  43,  43,  42,  41,  40,  39,  38,  38,  37,  36,  34,  32,  30,  28,  27,  25,  23,  22,  22,  21,  20,  21,  21,  20,  19,  19,  18,  16,  16,  17,  16,  14,  13,  13,  13,  13,  12,  11,   9,   9,   8,   9,   8,   7,   6,   5,   4,   2,   0,  -1,  -3,  -5,  -5,  -5,  -6,  -6,  -7, -10, -12, -14, -16, -18, -19, -21, -22, -23, -25, -26, -28, -29, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -38, -38, -38, -39, -39, -39, -39, -40, -41, -40, -40, -40, -39, -38, -37, -36, -35, -35, -34, -34, -33, -30, -27, -24, -24, -23, -21, -19, -17, -15, -13, -12, -10, -10,  -8,  -5,  -4,  -2,   1,   4,   6,   7,   9,  10,  11,  11,  12,  12,  14,  15,  15,  15,  14,  14,  14,  15,  15,  16,  17,  17,  18,  18,  18,  17,  17,  16,  17,  18,  19,  20,  21,  21,  20,  19,  18,  15,  11,  10,  10,   9,   8,   7,   6,   5,   3,   2,   2,   2,   1,   1,   1,   2,   2,
-  /*  58.0 */   2,   1,   1,   2,   4,   4,   7,   9,   9,  10,  11,  11,  12,  12,  13,  14,  14,  14,  15,  15,  15,  15,  15,  15,  16,  15,  13,  13,  12,  13,  14,  13,  10,   6,   6,   7,   7,   7,   5,   4,   3,   3,   2,   3,   4,   3,   2,   3,   2,   1,  -0,  -1,  -2,  -4,  -5,  -6,  -9, -12, -13, -15, -15, -17, -19, -20, -21, -23, -24, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -36, -37, -38, -40, -41, -43, -44, -45, -46, -47, -48, -48, -48, -49, -49, -48, -48, -48, -47, -47, -46, -45, -44, -42, -41, -38, -37, -35, -33, -32, -30, -28, -28, -26, -22, -19, -16, -12,  -9,  -8,  -7,  -3,   3,   5,   6,   9,  11,  14,  17,  19,  22,  25,  27,  30,  32,  35,  38,  40,  42,  43,  45,  47,  49,  51,  52,  54,  56,  58,  60,  62,  63,  63,  63,  63,  63,  62,  62,  61,  61,  61,  61,  61,  61,  61,  61,  60,  60,  60,  60,  57,  56,  56,  56,  58,  57,  57,  56,  55,  53,  50,  49,  49,  48,  47,  46,  45,  44,  43,  42,  42,  41,  39,  38,  37,  36,  34,  33,  31,  29,  27,  25,  22,  21,  20,  20,  20,  19,  19,  20,  19,  18,  17,  16,  15,  16,  15,  15,  15,  14,  14,  14,  13,  12,  11,  11,  10,   9,   9,   9,   8,   7,   6,   5,   4,   2,   1,  -1,  -2,  -3,  -3,  -4,  -5,  -5,  -8, -11, -13, -15, -16, -18, -20, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -32, -33, -33, -34, -34, -35, -36, -36, -35, -35, -36, -37, -37, -38, -38, -37, -36, -38, -39, -40, -40, -40, -39, -37, -36, -35, -34, -34, -34, -33, -33, -32, -29, -27, -24, -22, -20, -19, -17, -16, -16, -14, -13, -11,  -9,  -7,  -5,  -2,   1,   2,   4,   6,   7,   8,  10,  10,  10,  11,  11,  12,  14,  15,  14,  13,  13,  13,  13,  14,  15,  15,  16,  16,  17,  17,  16,  16,  17,  16,  17,  19,  19,  18,  18,  19,  17,  15,  13,  10,  10,   9,   7,   6,   7,   6,   3,   2,   2,   1,   1,   1,   1,   1,   2,
-  /*  59.0 */   1,   1,   4,   6,   6,   7,   8,   8,   9,   9,  10,  11,  11,  12,  12,  13,  13,  14,  15,  15,  15,  15,  15,  15,  15,  15,  14,  12,  11,  10,  11,  13,  12,  11,   8,   7,   6,   6,   7,   8,   7,   5,   7,   9,   6,   5,   5,   3,   2,   2,   0,  -1,  -3,  -4,  -5,  -8, -11, -12, -13, -15, -17, -18, -19, -20, -20, -21, -24, -27, -29, -30, -31, -32, -33, -33, -34, -35, -35, -36, -38, -40, -41, -42, -43, -45, -46, -48, -49, -49, -49, -49, -48, -48, -48, -48, -48, -47, -46, -46, -45, -44, -44, -42, -39, -36, -34, -33, -31, -29, -28, -27, -26, -24, -21, -18, -15, -11,  -7,  -5,  -1,   3,   5,   5,   7,  10,  13,  15,  18,  21,  23,  25,  28,  31,  34,  36,  38,  40,  43,  45,  46,  47,  49,  50,  52,  53,  55,  57,  59,  61,  62,  63,  64,  64,  63,  63,  63,  62,  62,  61,  61,  61,  60,  61,  61,  60,  59,  59,  58,  56,  56,  55,  56,  55,  55,  57,  56,  55,  54,  52,  51,  48,  47,  47,  46,  45,  44,  44,  44,  45,  44,  42,  40,  38,  35,  33,  31,  29,  28,  26,  24,  21,  19,  18,  19,  20,  20,  19,  18,  17,  17,  16,  15,  15,  15,  16,  17,  16,  15,  14,  14,  14,  13,  13,  13,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   2,   1,   0,  -1,  -2,  -3,  -3,  -5,  -9, -10, -12, -14, -15, -17, -18, -20, -21, -22, -24, -25, -27, -28, -28, -29, -30, -31, -31, -32, -33, -33, -34, -34, -34, -35, -34, -35, -36, -37, -36, -35, -34, -34, -34, -34, -35, -36, -36, -36, -36, -36, -34, -32, -32, -32, -31, -31, -30, -29, -28, -27, -25, -23, -20, -19, -19, -19, -18, -16, -14, -11,  -8,  -6,  -5,  -3,  -1,   0,   1,   2,   4,   6,   7,   8,   9,  10,  11,  12,  13,  13,  13,  13,  13,  13,  13,  14,  14,  15,  16,  17,  18,  17,  17,  16,  16,  16,  16,  16,  17,  17,  17,  16,  14,  14,  12,  10,   7,   6,   6,   7,   5,   1,   0,   0,   0,  -0,   0,   0,   1,   1,
-  /*  60.0 */   0,   3,   5,   5,   5,   6,   7,   7,   8,   9,   9,  10,  10,  11,  12,  12,  12,  13,  13,  15,  15,  15,  15,  15,  15,  15,  14,  13,   9,  11,  13,  13,  13,  12,  12,  12,  11,  10,  11,  10,  11,  12,  11,  10,   8,   7,   5,   4,   3,   2,   0,  -1,  -3,  -4,  -5,  -7, -10, -12, -12, -14, -16, -17, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -39, -40, -41, -42, -43, -44, -46, -47, -48, -49, -50, -49, -48, -47, -46, -47, -47, -47, -45, -44, -43, -43, -42, -42, -41, -38, -35, -32, -30, -28, -27, -25, -24, -23, -21, -19, -17, -13,  -8,  -5,  -2,   1,   4,   5,   7,   9,  11,  14,  17,  19,  22,  24,  27,  29,  30,  33,  36,  39,  41,  44,  45,  48,  48,  49,  50,  51,  52,  54,  56,  58,  60,  61,  63,  64,  64,  64,  64,  64,  63,  63,  62,  61,  61,  61,  60,  60,  60,  60,  60,  60,  58,  58,  57,  55,  56,  56,  55,  55,  54,  54,  53,  51,  49,  48,  47,  47,  45,  45,  45,  44,  45,  45,  42,  40,  39,  36,  33,  31,  29,  27,  25,  23,  20,  19,  19,  19,  20,  19,  18,  16,  16,  15,  15,  16,  16,  16,  16,  16,  16,  14,  12,  11,  12,  11,  11,  11,  11,  11,  10,   8,   7,   7,   7,   6,   5,   4,   3,   2,   0,  -1,  -2,  -3,  -3,  -4,  -8, -10, -11, -13, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -26, -28, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -32, -33, -34, -34, -33, -32, -31, -31, -33, -35, -35, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -29, -28, -28, -28, -28, -28, -27, -26, -23, -20, -19, -18, -17, -15, -12, -10,  -8,  -6,  -4,  -3,  -2,  -1,   1,   2,   4,   4,   5,   5,   6,   9,  10,  11,  12,  13,  12,  13,  14,  14,  14,  14,  14,  15,  16,  17,  17,  17,  17,  16,  15,  14,  14,  14,  14,  15,  14,  13,  13,  13,  12,  11,   9,   8,   9,   4,  -1,  -1,  -1,  -2,  -2,  -1,  -0,   0,   0,
-  /*  61.0 */   5,   4,   4,   4,   5,   6,   6,   7,   7,   7,   8,   8,   9,  10,  11,  11,  11,  12,  12,  13,  14,  14,  14,  14,  14,  15,  15,  15,  11,   6,   8,  12,  14,  16,  17,  18,  18,  16,  15,  17,  16,  13,  12,  10,   8,   7,   6,   5,   4,   3,   1,  -0,  -1,  -2,  -3,  -5,  -8, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -48, -49, -49, -49, -48, -47, -46, -46, -46, -45, -44, -43, -42, -40, -38, -37, -37, -35, -33, -31, -29, -27, -25, -24, -23, -22, -21, -20, -18, -13,  -8,  -3,  -0,   3,   6,   8,   9,  11,  13,  16,  19,  21,  23,  25,  27,  29,  31,  33,  36,  38,  42,  46,  46,  48,  49,  49,  50,  51,  52,  53,  55,  56,  58,  60,  62,  63,  64,  65,  65,  65,  64,  64,  63,  63,  62,  61,  61,  60,  60,  60,  60,  59,  60,  59,  59,  58,  58,  57,  57,  55,  53,  52,  51,  51,  51,  49,  48,  47,  46,  45,  46,  46,  46,  45,  43,  40,  38,  36,  34,  32,  31,  29,  26,  23,  21,  20,  19,  19,  19,  19,  18,  17,  15,  15,  16,  16,  16,  16,  15,  15,  14,  13,  12,  12,  12,  11,  11,  11,  11,  10,   9,   9,   8,   7,   7,   6,   5,   3,   3,   1,  -0,  -2,  -3,  -4,  -3,  -3,  -6,  -9, -10, -11, -13, -15, -17, -18, -19, -20, -21, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -29, -29, -29, -29, -29, -29, -30, -31, -30, -30, -30, -30, -31, -32, -33, -34, -34, -34, -33, -33, -32, -31, -31, -30, -30, -30, -29, -28, -27, -26, -26, -26, -26, -26, -24, -21, -19, -19, -17, -15, -13, -11, -10,  -8,  -7,  -6,  -5,  -3,  -1,   0,   2,   3,   3,   4,   5,   8,   9,  11,  11,  12,  13,  13,  13,  14,  14,  14,  15,  15,  15,  16,  16,  16,  17,  16,  15,  14,  13,  13,  14,  14,  14,  12,  11,  12,  12,  12,  11,  10,  10,  10,   8,   5,   3,   1,  -1,  -2,  -0,   4,   5,
-  /*  62.0 */   5,   5,   4,   5,   5,   6,   6,   6,   6,   6,   7,   7,   8,   8,   9,  10,  10,  11,  11,  12,  12,  12,  12,  12,  12,  14,  16,  15,  12,  10,  11,  16,  18,  18,  17,  17,  18,  18,  17,  15,  13,  12,  11,   9,   8,   7,   6,   5,   4,   2,   2,   1,   0,  -1,  -2,  -4,  -7, -11, -13, -14, -15, -18, -20, -22, -24, -26, -28, -29, -29, -30, -31, -32, -34, -34, -35, -37, -38, -40, -42, -42, -43, -44, -45, -46, -47, -48, -48, -48, -48, -48, -47, -46, -45, -44, -44, -43, -42, -40, -39, -38, -36, -34, -33, -31, -29, -27, -25, -24, -24, -23, -21, -19, -16, -13,  -9,  -5,  -1,   2,   6,  10,   9,  10,  12,  15,  18,  20,  22,  23,  25,  29,  31,  33,  37,  42,  45,  48,  49,  47,  47,  50,  50,  50,  51,  52,  53,  54,  55,  57,  59,  60,  62,  63,  64,  65,  65,  65,  65,  64,  64,  64,  63,  62,  62,  61,  61,  60,  60,  60,  60,  60,  59,  59,  58,  57,  56,  54,  52,  50,  49,  50,  50,  49,  48,  47,  46,  45,  45,  46,  46,  45,  42,  39,  37,  35,  34,  32,  30,  27,  23,  22,  21,  19,  19,  19,  18,  18,  19,  19,  18,  18,  18,  17,  17,  16,  15,  14,  14,  14,  13,  12,  11,  12,  11,  11,  10,   9,   9,   8,   8,   7,   6,   4,   2,   1,  -0,  -1,  -1,  -2,  -3,  -3,  -3,  -6,  -9, -10, -11, -11, -13, -15, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -25, -25, -26, -27, -27, -28, -27, -27, -27, -27, -27, -27, -28, -29, -29, -29, -29, -29, -30, -30, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -29, -28, -27, -25, -25, -24, -24, -23, -22, -20, -19, -22, -22, -18, -14, -12, -12, -11, -10,  -9,  -8,  -6,  -5,  -3,  -1,  -0,   1,   1,   2,   4,   7,   8,   9,  11,  12,  12,  12,  12,  12,  13,  13,  14,  14,  14,  14,  14,  14,  15,  14,  14,  13,  13,  13,  13,  13,  12,  11,  11,  11,  10,  10,  11,  11,  11,  10,   8,   6,   4,   2,   3,   5,   5,   5,
-  /*  63.0 */   4,   5,   5,   4,   5,   5,   5,   5,   6,   6,   6,   7,   7,   7,   7,   8,   9,  10,  11,  11,  11,  11,  11,  12,  12,  12,  12,  14,  16,  17,  15,  15,  16,  17,  17,  17,  16,  15,  13,  12,  12,  11,  10,   8,   7,   6,   5,   4,   3,   2,   2,   1,   0,  -1,  -3,  -5,  -8, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -27, -28, -29, -30, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -43, -43, -42, -41, -41, -40, -39, -38, -37, -36, -35, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11,  -9,  -6,  -4,  -1,   2,   7,  10,  11,  12,  14,  16,  18,  20,  22,  25,  28,  30,  32,  37,  41,  44,  47,  49,  50,  48,  46,  48,  50,  50,  51,  52,  52,  53,  55,  56,  57,  59,  61,  62,  63,  64,  65,  65,  65,  65,  65,  65,  63,  63,  63,  62,  61,  61,  61,  62,  62,  61,  60,  60,  59,  57,  56,  54,  52,  51,  50,  50,  49,  48,  47,  47,  45,  45,  45,  45,  44,  42,  41,  40,  37,  35,  33,  32,  31,  29,  25,  22,  20,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  16,  15,  15,  15,  14,  14,  14,  13,  13,  12,  12,  11,  11,  11,   9,   9,   9,   9,   8,   6,   4,   2,   1,   1,   1,  -0,  -2,  -2,  -2,  -3,  -6,  -8, -10, -11, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -23, -24, -24, -24, -25, -24, -25, -26, -26, -26, -27, -26, -27, -27, -27, -28, -29, -29, -29, -29, -30, -30, -30, -29, -30, -30, -29, -29, -29, -28, -26, -25, -24, -24, -23, -22, -22, -23, -22, -20, -18, -18, -17, -15, -14, -14, -13, -13, -12, -11, -11, -10,  -8,  -7,  -6,  -5,  -4,  -2,   1,   5,   7,   8,   8,   9,   9,  10,  11,  11,  11,  12,  12,  12,  12,  12,  11,  12,  13,  13,  13,  13,  13,  13,  12,  12,  11,  12,  12,  11,  10,  10,  10,   9,   9,   9,   8,   7,   7,   6,   5,   5,   5,   4,
-  /*  64.0 */   4,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   7,   7,   8,   9,  10,  10,  10,  10,  10,  11,  12,  12,  12,  13,  14,  14,  15,  15,  14,  13,  13,  13,  12,  12,  11,  10,  10,   9,   8,   7,   6,   5,   5,   4,   3,   2,  -0,  -3,  -6,  -8,  -9, -11, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -27, -28, -29, -30, -32, -34, -34, -35, -37, -39, -40, -42, -43, -44, -44, -43, -43, -42, -41, -41, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -35, -34, -34, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11,  -8,  -4,  -2,  -2,  -1,   1,   7,  12,  14,  15,  16,  19,  21,  22,  26,  28,  28,  29,  33,  36,  40,  43,  46,  49,  50,  50,  48,  45,  47,  50,  52,  53,  54,  54,  54,  55,  56,  58,  59,  61,  62,  63,  65,  65,  65,  66,  66,  66,  67,  67,  66,  65,  65,  64,  63,  63,  62,  61,  60,  58,  57,  55,  53,  52,  52,  52,  51,  51,  50,  49,  47,  45,  43,  42,  43,  43,  42,  41,  41,  39,  36,  34,  32,  31,  30,  30,  28,  26,  24,  21,  19,  18,  17,  18,  18,  18,  18,  18,  18,  17,  16,  16,  16,  15,  15,  15,  14,  14,  13,  13,  12,  11,  10,   9,   9,   9,   8,   7,   6,   5,   4,   2,   1,  -0,  -1,  -2,  -3,  -2,  -2,  -4,  -6,  -8, -10, -11, -12, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -21, -21, -22, -22, -22, -22, -23, -24, -25, -25, -25, -25, -24, -24, -25, -27, -28, -28, -28, -28, -28, -29, -29, -29, -28, -27, -26, -26, -26, -25, -24, -23, -22, -21, -20, -20, -20, -20, -20, -19, -18, -18, -18, -17, -16, -16, -15, -14, -13, -11,  -9, -10,  -9,  -6,  -3,  -0,   1,   3,   4,   5,   6,   6,   6,   7,   8,   9,   9,   9,  11,  11,  10,  10,  10,  10,  10,  10,  11,  11,  11,  12,  12,  12,  12,  12,  12,  11,  11,  11,  10,  10,   9,   9,   8,   8,   8,   7,   6,   5,   4,   4,   4,   4,
-  /*  65.0 */   5,   4,   4,   5,   5,   5,   5,   4,   4,   4,   4,   4,   5,   6,   6,   7,   7,   7,   8,   8,   9,   9,   9,   9,   9,  10,  10,  10,  10,  11,  11,  11,  11,  12,  12,  12,  12,  12,  11,  11,  11,  11,  10,   9,   9,   8,   7,   7,   5,   3,   2,  -0,  -3,  -7, -10, -11, -11, -13, -15, -16, -16, -18, -19, -20, -20, -22, -22, -24, -25, -26, -28, -29, -31, -33, -34, -34, -36, -37, -38, -39, -40, -41, -41, -41, -41, -40, -39, -38, -38, -38, -37, -37, -37, -37, -36, -35, -33, -33, -33, -33, -32, -32, -30, -28, -26, -25, -23, -21, -19, -16, -13, -11,  -8,  -6,  -5,  -2,   1,   3,   6,  12,  16,  18,  19,  20,  22,  26,  28,  27,  27,  29,  33,  37,  40,  43,  46,  48,  49,  49,  48,  45,  44,  46,  48,  51,  54,  56,  56,  56,  56,  58,  59,  59,  61,  63,  64,  64,  65,  66,  66,  67,  67,  67,  67,  67,  66,  66,  64,  63,  62,  61,  60,  58,  57,  56,  54,  53,  53,  52,  52,  51,  51,  50,  48,  46,  45,  44,  43,  41,  41,  40,  40,  39,  38,  36,  34,  32,  31,  30,  29,  27,  25,  23,  20,  19,  18,  18,  18,  18,  17,  18,  18,  17,  17,  17,  17,  17,  17,  17,  15,  13,  13,  12,  11,  10,   9,   8,   8,   7,   7,   6,   6,   5,   4,   2,   1,  -0,  -0,  -2,  -3,  -2,  -1,  -2,  -4,  -6,  -8, -10, -11, -11, -13, -13, -14, -15, -16, -17, -18, -18, -19, -19, -19, -19, -20, -21, -20, -20, -20, -21, -22, -23, -23, -23, -23, -22, -23, -25, -25, -25, -25, -25, -25, -24, -24, -25, -25, -24, -23, -22, -22, -22, -21, -20, -19, -18, -18, -17, -17, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -16, -14, -10,  -7,  -5,  -4,  -4,  -3,  -2,  -0,   0,   1,   2,   3,   3,   4,   5,   6,   6,   7,   9,   9,   9,  10,   9,   7,   7,   8,   8,   8,   8,   9,   9,   9,  10,  10,  10,  10,  11,  11,  11,  11,  10,  10,   9,   9,   7,   7,   7,   6,   6,   5,   5,   5,   5,   5,
-  /*  66.0 */   5,   4,   4,   4,   4,   4,   3,   3,   4,   4,   4,   4,   4,   4,   5,   5,   5,   6,   6,   6,   7,   7,   7,   7,   8,   8,   9,   9,  10,  10,   9,   9,  10,  10,   9,   9,   9,   9,   9,   9,   9,   8,   7,   6,   6,   4,   2,  -0,  -2,  -4,  -5,  -6,  -7,  -7,  -9, -10, -12, -13, -15, -16, -17, -18, -19, -19, -19, -20, -21, -23, -24, -25, -27, -29, -30, -32, -33, -34, -36, -36, -37, -38, -38, -39, -39, -39, -38, -37, -37, -36, -36, -36, -36, -35, -34, -34, -34, -33, -33, -32, -31, -30, -30, -29, -28, -28, -26, -24, -23, -21, -18, -16, -13, -11,  -8,  -5,  -1,   3,   6,   8,   9,  13,  17,  19,  21,  22,  24,  27,  28,  30,  31,  32,  34,  36,  39,  42,  44,  45,  47,  48,  48,  48,  48,  49,  49,  51,  53,  55,  57,  58,  58,  59,  60,  60,  61,  61,  62,  63,  64,  65,  65,  65,  66,  66,  65,  65,  65,  64,  63,  63,  62,  60,  58,  58,  56,  54,  54,  53,  52,  52,  51,  51,  50,  49,  47,  46,  45,  44,  43,  43,  42,  41,  40,  39,  37,  35,  34,  33,  32,  31,  30,  29,  28,  25,  23,  22,  20,  20,  19,  18,  18,  18,  18,  17,  17,  18,  18,  17,  16,  15,  15,  15,  14,  13,  12,  12,  12,  10,   8,   6,   6,   7,   6,   4,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -6,  -5,  -4,  -6,  -8, -10, -11, -12, -13, -14, -16, -17, -17, -17, -17, -17, -17, -17, -18, -19, -19, -19, -18, -19, -20, -21, -22, -22, -22, -22, -23, -23, -22, -22, -22, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -16, -15, -15, -15, -16, -15, -15, -15, -15, -14, -14, -15, -15, -14, -12,  -8,  -6,  -4,  -4,  -5,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   5,   5,   5,   7,   8,   8,   7,   5,   4,   5,   7,   7,   7,   7,   7,   7,   8,   8,   9,   9,  10,  10,  10,  10,  10,  10,   9,   9,   8,   8,   8,   6,   6,   6,   6,   5,   5,   5,   5,
-  /*  67.0 */   5,   5,   4,   4,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   5,   5,   5,   6,   6,   7,   8,   8,   9,   9,   9,   9,   9,   9,   8,   7,   7,   7,   7,   7,   7,   7,   6,   5,   4,   4,   2,  -0,  -1,  -2,  -3,  -4,  -5,  -5,  -6,  -8,  -9, -10, -12, -13, -15, -16, -16, -17, -18, -19, -20, -22, -23, -25, -26, -28, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -37, -37, -37, -36, -35, -34, -34, -33, -32, -31, -31, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -26, -26, -24, -22, -21, -19, -16, -14, -10,  -7,  -3,   1,   6,   8,   7,   8,  11,  15,  18,  19,  21,  23,  25,  26,  26,  28,  30,  31,  33,  36,  39,  41,  43,  44,  46,  47,  48,  48,  49,  50,  53,  55,  56,  57,  57,  57,  57,  58,  58,  59,  60,  60,  60,  61,  62,  63,  63,  64,  64,  64,  64,  63,  63,  63,  62,  60,  59,  58,  57,  56,  55,  54,  53,  52,  52,  51,  51,  50,  49,  48,  48,  47,  45,  43,  43,  42,  43,  42,  41,  40,  38,  36,  33,  31,  30,  31,  31,  31,  30,  28,  26,  24,  23,  22,  20,  19,  18,  18,  18,  17,  17,  17,  17,  18,  18,  17,  16,  15,  14,  13,  12,  12,  11,   9,   8,   7,   8,   7,   6,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -3,  -4,  -5,  -7,  -7,  -6,  -5,  -5,  -7,  -8, -10, -12, -13, -14, -15, -15, -15, -15, -15, -15, -16, -16, -16, -17, -17, -17, -18, -17, -18, -18, -19, -20, -20, -19, -20, -20, -20, -20, -20, -19, -19, -20, -20, -19, -18, -18, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -13, -14, -14, -11,  -8,  -5,  -5,  -5,  -5,  -5,  -4,  -3,  -2,  -2,  -1,   0,   3,   3,   3,   3,   5,   6,   5,   2,   2,   4,   5,   5,   6,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   8,   8,   8,   8,   8,   9,   9,   8,   8,   8,   7,   7,   6,   6,   6,   6,   6,   6,   5,
-  /*  68.0 */   5,   4,   4,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,   4,   4,   4,   4,   4,   5,   6,   8,   8,   7,   7,   8,   9,   9,   9,   9,   8,   8,   8,   7,   7,   6,   5,   4,   3,   2,   0,  -2,  -2,  -2,  -2,  -3,  -5,  -6,  -6,  -7,  -8,  -8,  -9, -10, -10, -11, -12, -15, -17, -18, -19, -21, -23, -25, -26, -28, -29, -30, -31, -32, -32, -33, -33, -34, -35, -35, -35, -35, -35, -35, -34, -34, -33, -32, -30, -30, -30, -30, -31, -31, -30, -28, -26, -26, -26, -26, -25, -24, -23, -22, -21, -19, -17, -14, -12,  -9,  -5,  -2,   0,   2,   3,   6,   9,  12,  14,  17,  19,  22,  24,  25,  25,  25,  25,  26,  27,  29,  32,  34,  36,  38,  40,  42,  43,  45,  46,  47,  48,  49,  51,  54,  56,  56,  56,  56,  57,  58,  59,  59,  59,  59,  60,  59,  59,  60,  61,  61,  62,  62,  62,  62,  61,  61,  60,  59,  59,  58,  57,  56,  55,  54,  52,  51,  51,  51,  50,  49,  49,  48,  48,  48,  47,  45,  44,  42,  41,  41,  41,  41,  41,  39,  36,  32,  30,  30,  31,  32,  31,  29,  28,  27,  25,  24,  23,  22,  21,  20,  19,  18,  18,  18,  18,  18,  17,  16,  15,  14,  13,  11,  11,  11,  10,  10,   9,   9,   8,   6,   5,   4,   3,   2,   1,  -0,  -1,  -1,  -2,  -3,  -3,  -4,  -5,  -6,  -7,  -7,  -6,  -6,  -7,  -9, -11, -12, -13, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -16, -16, -16, -15, -16, -17, -17, -18, -18, -17, -17, -16, -16, -16, -17, -16, -16, -16, -17, -16, -16, -16, -16, -17, -16, -17, -16, -16, -15, -15, -15, -14, -13, -12, -12, -11, -11, -11, -11, -12, -14, -15, -16, -14, -10,  -7,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -2,  -1,   1,   1,   1,   2,   1,   0,   1,   2,   3,   3,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   7,   7,   7,   8,   8,   8,   8,   7,   6,   6,   6,   6,   6,   6,   6,   6,   6,   5,
-  /*  69.0 */   4,   3,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   5,   6,   7,   7,   7,   7,   5,   4,   3,   1,  -2,  -4,  -5,  -6,  -6,  -6,  -6,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -8,  -8,  -9, -11, -12, -14, -15, -17, -18, -19, -20, -21, -22, -23, -26, -28, -30, -30, -31, -31, -32, -31, -31, -31, -32, -32, -32, -32, -31, -31, -30, -29, -28, -28, -28, -28, -28, -28, -27, -25, -24, -23, -24, -23, -22, -21, -21, -19, -17, -14, -11,  -9,  -6,  -4,  -2,  -0,   1,   1,   4,   9,  13,  15,  16,  18,  21,  24,  25,  26,  27,  26,  24,  23,  24,  26,  29,  31,  34,  36,  38,  39,  41,  42,  44,  45,  47,  48,  50,  51,  53,  55,  54,  55,  57,  59,  59,  60,  61,  61,  60,  59,  59,  59,  59,  59,  60,  60,  61,  61,  60,  60,  60,  59,  58,  58,  57,  56,  54,  52,  52,  51,  51,  50,  49,  49,  49,  48,  47,  47,  46,  45,  44,  43,  43,  41,  40,  39,  39,  39,  38,  37,  35,  33,  32,  31,  31,  30,  29,  28,  27,  26,  25,  24,  22,  21,  20,  19,  18,  17,  17,  16,  15,  14,  13,  13,  12,  11,  10,  10,   9,   8,   8,   7,   6,   4,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -3,  -3,  -4,  -5,  -5,  -5,  -6,  -7,  -7,  -8,  -8,  -9, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -15, -16, -16, -15, -15, -15, -14, -14, -15, -15, -16, -17, -17, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -11, -10, -10, -10, -12, -13, -14, -14, -13, -11,  -7,  -5,  -5,  -6,  -5,  -4,  -4,  -3,  -2,  -2,  -1,   0,   0,   0,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   3,   3,   3,   4,   4,   4,   4,   4,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,
-  /*  70.0 */   3,   2,   2,   2,   1,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,  -0,  -0,  -1,  -1,  -2,  -2,  -2,  -1,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9, -10, -11, -11, -12, -13, -13, -14, -15, -17, -18, -18, -18, -18, -18, -19, -20, -22, -25, -27, -28, -28, -28, -28, -29, -29, -28, -28, -28, -28, -28, -27, -27, -26, -25, -25, -25, -26, -26, -26, -25, -25, -24, -22, -21, -21, -20, -20, -18, -17, -15, -13, -11,  -8,  -5,  -2,  -1,   1,   3,   4,   4,   5,   7,  10,  14,  16,  19,  21,  23,  24,  26,  27,  28,  28,  27,  26,  26,  27,  30,  32,  35,  36,  38,  39,  40,  42,  43,  44,  46,  47,  48,  50,  52,  54,  55,  55,  56,  57,  57,  57,  56,  57,  58,  58,  57,  56,  57,  58,  60,  59,  59,  59,  59,  59,  59,  59,  58,  57,  56,  55,  54,  52,  51,  51,  51,  51,  50,  50,  49,  48,  47,  47,  46,  45,  45,  44,  43,  43,  42,  41,  40,  39,  39,  38,  37,  35,  33,  31,  30,  28,  28,  27,  25,  24,  25,  24,  23,  21,  20,  19,  18,  17,  16,  15,  14,  14,  13,  12,  11,  10,  10,   9,   8,   7,   6,   6,   5,   4,   3,   2,   2,   1,  -0,  -1,  -2,  -2,  -2,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -8,  -8,  -9,  -9,  -9, -10, -10, -10, -10, -10, -11, -11, -11, -12, -13, -13, -14, -14, -14, -14, -15, -14, -14, -13, -13, -13, -12, -12, -13, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -13, -12, -11, -10,  -9,  -9, -10, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -8,  -9,  -9,  -9, -10, -10, -10,  -9,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,
-  /*  71.0 */   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   2,   1,   1,   1,   0,  -0,  -0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -3,  -2,  -3,  -4,  -5,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -4,  -5,  -7,  -9, -10, -11, -12, -12, -13, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -18, -19, -21, -23, -24, -25, -25, -25, -25, -25, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -20, -21, -21, -21, -20, -20, -19, -18, -18, -17, -16, -15, -13, -12, -10,  -8,  -6,  -4,  -2,  -0,   1,   2,   3,   3,   5,   8,  10,  12,  14,  16,  17,  19,  22,  24,  26,  26,  27,  28,  29,  28,  28,  28,  30,  32,  34,  36,  37,  38,  39,  40,  41,  42,  43,  45,  46,  47,  49,  50,  51,  52,  53,  53,  54,  55,  54,  54,  54,  54,  53,  53,  55,  56,  56,  57,  57,  56,  57,  57,  57,  57,  58,  57,  57,  56,  56,  55,  54,  54,  53,  53,  52,  52,  51,  50,  49,  48,  47,  46,  46,  45,  44,  44,  43,  42,  42,  41,  40,  40,  39,  37,  35,  33,  31,  29,  28,  28,  27,  25,  24,  23,  22,  21,  20,  19,  17,  17,  16,  16,  15,  15,  13,  12,  11,  10,   9,   9,   8,   8,   8,   7,   6,   5,   3,   3,   2,   2,   1,   1,   0,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -9,  -9, -10, -10, -10, -10,  -9,  -9, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -13, -13, -12, -11, -10,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -0,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   3,   3,   3,   2,   2,   3,
-  /*  72.0 */   2,   2,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,  -0,  -0,  -0,   0,   0,   1,   0,   0,  -0,  -1,  -1,  -2,  -2,  -3,  -3,  -4,  -6,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -5,  -7, -10, -11, -10, -10, -10,  -9, -10, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -23, -23, -22, -21, -20, -19, -18, -18, -18, -17, -16, -17, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10,  -9,  -8,  -8,  -6,  -4,  -1,   1,   1,   2,   4,   7,   9,  10,  11,  12,  13,  14,  16,  17,  19,  21,  23,  25,  26,  26,  25,  26,  27,  28,  30,  32,  34,  35,  36,  37,  37,  38,  39,  39,  40,  41,  42,  43,  44,  46,  47,  48,  49,  49,  50,  50,  51,  51,  51,  51,  53,  54,  53,  53,  53,  53,  54,  55,  55,  54,  54,  54,  54,  54,  54,  53,  53,  53,  53,  53,  53,  53,  52,  52,  52,  52,  51,  51,  50,  49,  49,  48,  47,  46,  45,  44,  43,  42,  42,  41,  41,  41,  40,  38,  36,  34,  33,  31,  29,  27,  26,  24,  23,  22,  21,  20,  19,  18,  18,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   8,   8,   7,   7,   6,   6,   5,   4,   3,   3,   2,   2,   2,   1,  -1,  -2,  -2,  -3,  -3,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -9, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -14, -14, -14, -13, -13, -13, -13, -12, -13, -14, -14, -13, -12, -12, -11, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,
-  /*  73.0 */   2,   2,   2,   1,   1,   0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -1,  -1,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -7,  -8, -10, -10, -10, -10,  -9,  -9,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -20, -20, -20, -20, -20, -21, -20, -19, -18, -17, -16, -15, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10,  -8,  -6,  -5,  -5,  -3,  -1,   2,   3,   4,   6,   9,  12,  13,  13,  14,  14,  14,  15,  16,  17,  19,  22,  24,  22,  20,  20,  21,  22,  23,  24,  26,  29,  31,  32,  34,  36,  37,  37,  37,  37,  38,  39,  40,  41,  42,  42,  43,  45,  46,  47,  48,  48,  49,  49,  49,  48,  48,  49,  50,  50,  49,  50,  51,  51,  51,  52,  53,  53,  52,  51,  51,  50,  51,  51,  51,  51,  51,  51,  50,  50,  50,  50,  49,  49,  49,  49,  49,  48,  48,  47,  46,  46,  45,  44,  43,  43,  42,  42,  41,  40,  37,  35,  33,  31,  30,  29,  28,  26,  24,  23,  22,  21,  20,  19,  18,  17,  17,  16,  16,  15,  14,  14,  13,  12,  10,  10,   9,   8,   7,   7,   6,   5,   4,   3,   3,   2,   2,   2,   2,   2,   1,  -0,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -9, -10, -10, -11, -11, -12, -12, -12, -11, -11, -11, -11, -11, -12, -13, -13, -13, -12, -12, -12, -12, -13, -13, -13, -12, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -1,  -1,  -0,  -0,  -0,  -0,   0,   0,   1,   1,   1,   1,   1,   2,   2,   2,   2,   1,   1,   2,   2,   1,   1,   1,   1,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,
-  /*  74.0 */   1,   1,   2,   2,   1,   1,   1,   1,   2,   2,   2,   3,   2,   2,   1,   1,   0,   0,  -0,  -1,  -3,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9,  -9, -10, -10, -10,  -9,  -9,  -7,  -6,  -5,  -5,  -7,  -9,  -9,  -9,  -9, -10, -10, -11, -12, -12, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -14, -13, -12, -12, -12, -11, -10, -10, -10, -10, -10, -10,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -1,   1,   3,   6,   8,  11,  13,  14,  15,  15,  16,  16,  16,  17,  18,  20,  21,  20,  19,  18,  18,  20,  21,  22,  24,  25,  27,  29,  30,  32,  33,  34,  34,  35,  35,  36,  37,  37,  38,  38,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  47,  47,  47,  47,  47,  48,  48,  48,  48,  48,  49,  49,  50,  50,  51,  50,  49,  49,  48,  48,  48,  48,  48,  48,  48,  48,  47,  47,  47,  47,  47,  46,  45,  45,  45,  45,  45,  45,  44,  43,  43,  42,  41,  40,  39,  39,  38,  36,  35,  33,  31,  29,  28,  26,  25,  24,  23,  22,  21,  20,  19,  19,  18,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   4,   3,   3,   2,   2,   2,   2,   1,   0,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -9,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -10, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -0,   0,   1,   0,   0,   0,   1,   1,   1,   1,   2,   3,   3,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
-  /*  75.0 */   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   2,   2,   1,   1,   0,  -0,  -1,  -1,  -2,  -2,  -2,  -3,  -4,  -4,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -8,  -7,  -6,  -4,  -3,  -4,  -6,  -8, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -13, -12, -12, -11, -10,  -9,  -9,  -8,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   2,   4,   6,   7,   7,   6,   5,   7,   9,  12,  14,  15,  16,  17,  18,  18,  19,  19,  19,  19,  18,  18,  17,  17,  18,  19,  20,  21,  22,  23,  25,  27,  28,  30,  31,  32,  32,  33,  33,  34,  35,  36,  36,  36,  37,  37,  38,  38,  39,  40,  41,  42,  42,  43,  44,  45,  46,  46,  45,  45,  46,  47,  47,  47,  45,  44,  44,  44,  45,  45,  46,  47,  47,  47,  46,  46,  46,  46,  46,  46,  45,  45,  45,  45,  44,  44,  44,  44,  44,  44,  44,  44,  43,  42,  42,  41,  41,  40,  40,  40,  40,  40,  37,  35,  33,  31,  30,  29,  28,  27,  26,  24,  23,  22,  21,  21,  20,  19,  18,  18,  17,  16,  15,  14,  13,  12,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   4,   3,   3,   2,   2,   2,   3,   3,   2,   1,  -1,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
-  /*  76.0 */   2,   2,   2,   1,  -0,  -1,  -0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -7,  -6,  -5,  -5,  -5,  -5,  -5,  -6,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   1,   2,   3,   4,   5,   6,   8,  10,  11,  12,  13,  14,  14,  15,  15,  16,  16,  17,  17,  17,  18,  19,  19,  20,  21,  21,  22,  24,  25,  27,  28,  29,  30,  31,  31,  32,  32,  32,  33,  33,  34,  35,  36,  37,  38,  38,  39,  40,  41,  41,  42,  43,  44,  45,  46,  47,  47,  46,  44,  42,  40,  39,  38,  38,  38,  38,  38,  38,  39,  41,  42,  42,  43,  43,  44,  45,  44,  44,  43,  43,  43,  42,  42,  43,  43,  43,  43,  43,  43,  43,  43,  42,  42,  41,  41,  40,  39,  40,  40,  39,  37,  34,  32,  31,  30,  30,  29,  28,  27,  26,  25,  24,  23,  22,  21,  20,  19,  18,  18,  17,  16,  15,  14,  13,  12,  11,  11,  10,  10,   9,   8,   8,   7,   7,   6,   5,   5,   5,   4,   4,   3,   3,   2,   2,   2,   2,   2,   1,   1,  -0,  -1,  -1,  -2,  -3,  -3,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,  -0,  -0,  -0,  -0,  -1,  -0,   0,   1,   1,   1,   0,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,   1,   1,   2,
-  /*  77.0 */   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   3,   2,   2,   1,   1,   0,  -0,  -1,  -1,  -1,  -1,  -2,  -2,  -3,  -3,  -2,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -3,  -3,  -3,  -4,  -5,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -3,  -3,  -2,  -1,  -0,   1,   3,   5,   6,   6,   7,   7,   8,   9,   9,   9,   9,   9,  10,  10,  11,  11,  13,  14,  16,  17,  19,  20,  21,  22,  23,  23,  24,  24,  24,  25,  26,  27,  27,  28,  29,  30,  30,  31,  31,  31,  31,  32,  33,  33,  34,  35,  35,  36,  37,  38,  38,  39,  40,  41,  42,  42,  43,  43,  43,  43,  42,  41,  39,  36,  33,  31,  31,  33,  33,  33,  33,  33,  34,  36,  38,  39,  40,  40,  41,  42,  42,  42,  42,  41,  41,  41,  41,  42,  41,  41,  41,  42,  42,  41,  41,  40,  40,  40,  39,  38,  38,  37,  35,  33,  32,  30,  30,  29,  29,  28,  28,  27,  26,  25,  24,  23,  22,  21,  20,  19,  18,  17,  17,  16,  15,  15,  14,  13,  13,  12,  11,  11,  10,   9,   9,   8,   7,   7,   6,   6,   5,   5,   5,   4,   4,   3,   3,   2,   2,   1,   1,   1,   1,   1,   1,   0,  -1,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -0,  -0,   0,   0,  -0,  -0,  -1,  -0,   0,   0,   1,   1,   1,   2,   2,   1,   1,   0,   0,   0,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   4,   3,   3,   3,   4,   4,   4,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,
-  /*  78.0 */   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   4,   4,   3,   3,   2,   2,   1,   0,   0,  -0,  -0,  -0,  -1,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   1,   2,   4,   5,   6,   8,   9,  10,  10,  10,  10,   9,   9,   9,   9,  10,  12,  14,  16,  17,  18,  19,  20,  22,  23,  24,  25,  26,  26,  27,  28,  28,  29,  29,  30,  30,  30,  30,  31,  31,  31,  32,  32,  33,  33,  33,  34,  34,  34,  35,  35,  36,  37,  37,  38,  38,  39,  39,  39,  38,  37,  36,  35,  34,  32,  31,  30,  29,  30,  30,  31,  31,  31,  31,  31,  33,  35,  36,  36,  36,  37,  38,  39,  40,  39,  39,  38,  38,  38,  39,  39,  39,  40,  40,  40,  39,  39,  39,  39,  38,  37,  35,  34,  32,  32,  32,  31,  30,  29,  29,  29,  28,  27,  26,  24,  24,  23,  22,  21,  20,  19,  19,  18,  17,  17,  16,  16,  15,  14,  14,  13,  13,  12,  12,  11,  10,  10,   9,   9,   8,   7,   7,   7,   6,   6,   5,   5,   4,   4,   3,   3,   3,   3,   2,   1,   1,   0,  -0,  -0,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -0,   1,   2,   2,   2,   2,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   3,   3,   3,   3,   3,   2,   2,   2,   2,   3,   3,   3,
-  /*  79.0 */   3,   3,   4,   4,   4,   3,   3,   3,   3,   3,   2,   2,   2,   3,   3,   3,   3,   3,   2,   2,   2,   1,  -0,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -2,  -1,  -1,  -0,   0,   1,   1,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   0,   1,   1,   1,   0,   1,   1,   1,   2,   2,   3,   4,   5,   6,   6,   6,   5,   5,   5,   5,   6,   8,   9,  10,  11,  11,  11,  10,   8,   8,   7,   7,   7,   8,   9,  11,  12,  14,  15,  17,  18,  20,  21,  22,  23,  24,  25,  26,  26,  27,  27,  28,  28,  29,  29,  30,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  35,  35,  36,  36,  36,  37,  37,  37,  36,  35,  34,  33,  32,  31,  30,  29,  29,  28,  28,  29,  29,  30,  30,  30,  30,  31,  31,  32,  33,  34,  35,  36,  37,  37,  36,  36,  35,  36,  36,  37,  37,  37,  37,  38,  38,  39,  39,  38,  38,  37,  37,  36,  35,  35,  35,  34,  33,  32,  30,  29,  28,  28,  27,  26,  25,  24,  24,  23,  22,  22,  21,  20,  20,  19,  18,  18,  17,  17,  16,  15,  15,  14,  14,  14,  13,  13,  12,  11,  11,  10,  10,   9,   9,   8,   8,   8,   7,   7,   6,   6,   6,   5,   5,   4,   3,   3,   3,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -1,  -1,  -0,   0,   0,   1,   1,   1,   1,   1,  -0,  -1,  -2,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,   1,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   3,   3,   3,   3,   3,   4,   4,   3,   3,   2,   2,   2,   2,   1,   1,   0,   0,   0,   0,   1,   1,   1,   1,   2,   2,   3,   3,   3,   3,
-  /*  80.0 */   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -1,  -1,   0,   1,   2,   2,   3,   4,   4,   5,   5,   4,   4,   3,   3,   2,   2,   2,   2,   2,   3,   3,   4,   5,   5,   6,   8,   9,  10,  11,  11,  11,  10,   9,   8,   8,   8,   9,  10,  12,  13,  15,  15,  15,  15,  14,  13,  12,  10,   9,   8,   7,   7,   8,   9,  10,  11,  13,  14,  15,  17,  18,  20,  21,  22,  23,  24,  25,  26,  27,  27,  28,  28,  29,  30,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  36,  37,  37,  37,  37,  37,  36,  36,  35,  34,  33,  33,  32,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  32,  32,  32,  32,  33,  34,  34,  35,  34,  34,  34,  34,  34,  34,  34,  34,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  33,  33,  32,  31,  30,  30,  29,  29,  29,  28,  27,  27,  26,  25,  25,  24,  24,  23,  23,  22,  22,  21,  20,  20,  19,  18,  18,  17,  17,  16,  16,  16,  15,  14,  14,  13,  13,  12,  12,  11,  11,  11,  11,  11,  10,   9,   9,   8,   8,   7,   7,   6,   6,   5,   5,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,   2,   2,   1,   0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,  -0,   0,   0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   0,   1,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   2,   2,   2,   1,   1,   1,   1,   1,   0,   0,   0,   0,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   4,
-  /*  81.0 */   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   8,   8,   9,  10,  10,  11,  11,  11,  11,  11,  12,  13,  14,  15,  16,  16,  17,  16,  16,  16,  17,  17,  18,  19,  19,  19,  18,  17,  15,  14,  12,  12,  11,  12,  12,  14,  15,  16,  18,  19,  20,  21,  21,  22,  23,  23,  24,  25,  25,  26,  27,  28,  29,  29,  30,  31,  32,  33,  34,  34,  35,  35,  34,  34,  34,  35,  35,  35,  35,  35,  34,  33,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  32,  33,  33,  33,  32,  31,  31,  31,  31,  32,  32,  33,  33,  32,  32,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  30,  30,  30,  29,  29,  28,  28,  28,  28,  27,  27,  26,  26,  25,  25,  24,  24,  23,  23,  22,  21,  21,  20,  20,  19,  19,  18,  18,  18,  18,  17,  17,  16,  16,  16,  15,  15,  15,  14,  14,  14,  14,  13,  13,  12,  12,  11,  10,  10,   9,   9,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   5,   5,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   3,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,
-  /*  82.0 */   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,   6,   6,   6,   7,   8,   8,   9,  10,  10,  11,  11,  11,  11,  11,  12,  12,  13,  13,  13,  14,  14,  14,  15,  16,  17,  17,  18,  18,  19,  19,  20,  21,  21,  21,  21,  21,  20,  20,  19,  19,  19,  19,  18,  17,  17,  16,  16,  16,  16,  16,  17,  17,  18,  18,  18,  19,  19,  19,  20,  20,  21,  22,  24,  25,  26,  27,  29,  29,  30,  31,  31,  31,  32,  32,  32,  32,  32,  32,  31,  31,  30,  30,  29,  29,  28,  27,  27,  27,  27,  27,  28,  29,  30,  31,  31,  32,  32,  31,  31,  30,  30,  29,  29,  29,  29,  30,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  32,  31,  31,  31,  30,  30,  29,  28,  28,  27,  27,  26,  26,  26,  26,  25,  24,  24,  23,  23,  22,  22,  22,  22,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  15,  14,  13,  12,  12,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,   9,   9,   9,   8,   8,   8,   8,   8,   8,   8,   7,   7,   8,   8,   8,   8,   8,   7,   6,   6,   5,   5,   5,   5,   5,   5,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   5,   5,   5,   5,   5,   4,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,
-  /*  83.0 */   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,  10,  10,  11,  11,  12,  12,  12,  13,  13,  14,  14,  15,  15,  15,  16,  16,  16,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  19,  19,  19,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  21,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  28,  28,  29,  29,  29,  30,  30,  30,  30,  30,  30,  30,  30,  29,  29,  29,  28,  28,  28,  28,  28,  28,  28,  28,  27,  27,  27,  27,  28,  28,  28,  29,  29,  29,  29,  29,  29,  29,  28,  28,  28,  28,  28,  28,  28,  28,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  25,  25,  25,  25,  24,  24,  24,  23,  23,  23,  22,  22,  22,  21,  21,  21,  21,  20,  20,  19,  19,  19,  18,  18,  18,  18,  17,  17,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  14,  13,  13,  12,  12,  12,  11,  11,  11,  11,  11,  10,  10,  10,  10,   9,   9,   8,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   7,   7,   7,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   4,   5,   5,   6,   7,   7,   8,   8,   7,   6,   6,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,
-  /*  84.0 */   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  17,  17,  17,  18,  18,  19,  19,  19,  19,  20,  20,  20,  20,  20,  21,  21,  21,  21,  22,  22,  22,  22,  22,  23,  23,  23,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  26,  26,  26,  26,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  23,  23,  23,  23,  23,  22,  22,  22,  22,  21,  21,  21,  21,  20,  20,  20,  19,  19,  19,  19,  18,  18,  18,  18,  17,  17,  17,  16,  16,  16,  16,  15,  15,  15,  15,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  12,  12,  12,  12,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,   9,   9,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,   6,   7,   7,   8,   8,   9,   9,   8,   8,   8,   8,   7,   7,   7,   7,   7,   7,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,
-  /*  85.0 */   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  19,  19,  19,  19,  20,  20,  20,  20,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  23,  23,  23,  24,  24,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  25,  25,  24,  24,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  23,  23,  23,  23,  22,  22,  22,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   7,   7,   7,   7,   7,   8,   8,   9,   9,   9,  10,  10,   9,   9,   9,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,
-  /*  86.0 */   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  20,  20,  20,  21,  21,  22,  22,  22,  23,  23,  23,  23,  22,  22,  22,  21,  21,  21,  21,  20,  20,  20,  20,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  22,  22,  21,  21,  21,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  10,   9,   9,   8,   8,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,
-  /*  87.0 */  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  20,  20,  20,  20,  20,  20,  21,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  11,  11,  10,  10,   9,   9,   9,   9,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,
-  /*  88.0 */  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  13,  13,  13,  13,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  13,  13,  13,  13,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,
-  /*  89.0 */  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,
-  /*  90.0 */  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14
 };
-#endif  // HEIGHT_H_INCLUDED_
+
+#endif // FILTERS_ENABLED
+#endif // HEIGHT_H_INCLUDED_
diff --git a/heightgrid.h b/heightgrid.h
new file mode 100644 (file)
index 0000000..4acb034
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+    Copyright (C) 2013  Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#ifndef HEIGHTGRID_H_INCLUDED_
+#define HEIGHTGRID_H_INCLUDED_
+
+/* Created by "tools/createGeoidGrid 1.0 int8_t" using GeographicLib utility GeoidEval with egm96-5. */
+
+#include <cstdint>
+
+#define GEOID_GRID_DEG 1.0
+#define GEOID_SCALE 1.0
+#define GEOID_ROW 181
+#define GEOID_COL 361
+static const int8_t geoid_delta[GEOID_COL* GEOID_ROW]= {
+  /*         -180,-179,-178,-177,-176,-175,-174,-173,-172,-171,-170,-169,-168,-167,-166,-165,-164,-163,-162,-161,-160,-159,-158,-157,-156,-155,-154,-153,-152,-151,-150,-149,-148,-147,-146,-145,-144,-143,-142,-141,-140,-139,-138,-137,-136,-135,-134,-133,-132,-131,-130,-129,-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180 */
+  /* -90.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
+  /* -89.0 */ -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
+  /* -88.0 */ -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -30,
+  /* -87.0 */ -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -24, -25, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -27, -27, -28, -28, -28, -28, -28, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -32, -32, -32,
+  /* -86.0 */ -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -32, -32, -32, -32, -32, -33, -33, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -31, -31, -31, -32, -32, -32, -32, -32, -32, -32, -31, -31, -30, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -24, -25, -25, -25, -25, -26, -26, -26, -26, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -21, -20, -20, -20, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -16, -16, -16, -16, -16, -17, -17, -17, -17, -17, -18, -18, -18, -18, -19, -19, -19, -19, -20, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -26, -26, -27, -27, -27, -28, -28, -28, -29, -29, -29, -30, -30, -30, -31, -31, -31, -32, -32, -32, -32, -32, -33, -33, -33, -33, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -33, -33, -33, -33, -33,
+  /* -85.0 */ -37, -38, -39, -39, -40, -40, -40, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, -38, -37, -37, -38, -38, -38, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -35, -34, -34, -33, -32, -32, -31, -30, -30, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -27, -27, -28, -28, -29, -29, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -25, -25, -25, -25, -25, -25, -24, -23, -22, -21, -19, -18, -18, -17, -17, -17, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -21, -22, -22, -22, -23, -23, -24, -24, -24, -25, -25, -26, -26, -26, -27, -28, -28, -29, -29, -30, -30, -31, -32, -32, -32, -33, -33, -34, -34, -34, -35, -35, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36, -36, -37, -37, -37, -37, -36, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -35, -35, -36, -36, -37, -37, -38, -38, -38, -37, -37, -36, -35, -35, -34, -34, -35, -36, -37,
+  /* -84.0 */ -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -45, -45, -45, -45, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -39, -38, -38, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -25, -25, -26, -26, -26, -25, -25, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -22, -21, -21, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -19, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10,  -9,  -9,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -19, -19, -20, -20, -21, -22, -22, -22, -23, -23, -24, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -35, -35, -36, -36, -36, -36, -37, -37, -37, -37, -37, -37, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -37, -37, -36, -36, -35, -35, -34, -34, -34, -34, -34, -34, -34, -35, -36, -37, -38, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -44,
+  /* -83.0 */ -45, -45, -46, -46, -46, -46, -46, -46, -46, -46, -47, -47, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -32, -32, -31, -31, -30, -30, -29, -29, -29, -29, -30, -30, -30, -30, -30, -30, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -24, -24, -23, -22, -22, -21, -21, -20, -20, -20, -21, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -16, -16, -15, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -11, -10, -10,  -9,  -8,  -6,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9, -10, -10, -11, -11, -12, -12, -13, -14, -15, -15, -16, -17, -18, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -25, -25, -26, -27, -28, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -39, -39, -40, -40, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -37, -38, -38, -39, -39, -40, -40, -41, -41, -42, -42, -43, -44, -44, -44, -45, -45, -45, -45, -45, -45,
+  /* -82.0 */ -48, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, -48, -48, -48, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -46, -45, -45, -45, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -40, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -28, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -24, -24, -24, -23, -22, -21, -20, -20, -20, -20, -19, -19, -19, -18, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,  -0,   0,   1,   1,   1,   1,   1,   1,   0,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   1,   1,   0,  -0,  -1,  -1,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -6,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -21, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -40, -40, -41, -41, -42, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, -43, -43, -42, -41, -40, -40, -41, -42, -44, -45, -45, -46, -46, -46, -47, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -48, -48,
+  /* -81.0 */ -50, -50, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -41, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -35, -35, -34, -33, -32, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -27, -27, -26, -26, -26, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -25, -25, -24, -24, -23, -23, -22, -22, -22, -21, -21, -20, -20, -20, -20, -20, -20, -19, -19, -18, -18, -17, -16, -16, -16, -16, -16, -15, -15, -15, -14, -14, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   0,   1,   2,   2,   3,   3,   3,   2,   2,   2,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   4,   5,   5,   6,   6,   5,   5,   5,   5,   4,   4,   4,   4,   3,   4,   4,   4,   4,   5,   5,   5,   5,   5,   5,   4,   3,   2,   2,   1,   1,  -0,  -1,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -10, -11, -11, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -47, -47, -48, -48, -48, -48, -48, -49, -49, -50, -49, -48, -47, -45, -45, -46, -47, -48, -50, -50, -50, -50, -49, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
+  /* -80.0 */ -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -53, -53, -53, -53, -53, -53, -52, -52, -52, -52, -52, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -50, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -45, -44, -42, -42, -41, -41, -41, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -38, -38, -37, -36, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -23, -23, -23, -22, -22, -22, -22, -23, -24, -25, -25, -25, -24, -24, -23, -23, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -21, -21, -21, -22, -22, -22, -22, -22, -21, -21, -20, -19, -18, -17, -17, -17, -17, -18, -18, -18, -18, -18, -17, -17, -17, -17, -18, -19, -19, -18, -17, -16, -15, -15, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   1,   1,   2,   2,   3,   3,   4,   4,   4,   4,   4,   3,   3,   2,   2,   2,   3,   3,   3,   4,   4,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   7,   8,   9,   9,   9,   8,   8,   7,   7,   7,   6,   5,   5,   4,   4,   4,   5,   5,   5,   5,   5,   6,   6,   6,   5,   4,   4,   3,   3,   2,   2,   1,   0,  -0,  -1,  -1,  -2,  -3,  -4,  -6,  -7,  -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -27, -28, -29, -30, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, -51, -51, -51, -51, -51, -51, -52, -53, -54, -55, -54, -54, -53, -52, -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, -52, -52, -52, -52, -53,
+  /* -79.0 */ -54, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, -54, -54, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -51, -51, -50, -50, -50, -50, -50, -51, -51, -51, -50, -49, -48, -47, -47, -46, -46, -45, -44, -43, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -36, -36, -36, -35, -35, -34, -34, -34, -34, -33, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -23, -22, -21, -20, -19, -18, -16, -15, -17, -20, -23, -25, -25, -24, -23, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -15, -15, -15, -15, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -15, -15, -15, -14, -13, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -0,  -0,   0,   1,   1,   2,   2,   2,   3,   3,   3,   4,   4,   4,   5,   5,   6,   6,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   9,   9,  10,  10,  10,  10,   9,   8,   8,   7,   7,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   3,   3,   2,   2,   1,   0,  -0,  -1,  -2,  -2,  -3,  -3,  -5,  -7,  -8, -10, -11, -12, -12, -13, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -41, -41, -42, -42, -43, -44, -44, -45, -46, -47, -48, -49, -50, -51, -51, -52, -52, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, -52, -52, -53, -54, -56, -57, -57, -56, -55, -54, -53, -53, -53, -52, -52, -53, -53, -53, -52, -52, -53, -53, -54, -54, -54,
+  /* -78.0 */ -56, -56, -57, -57, -57, -57, -57, -56, -56, -56, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -55, -54, -54, -54, -53, -53, -53, -54, -54, -54, -53, -52, -52, -52, -51, -51, -51, -50, -51, -51, -51, -51, -49, -48, -47, -46, -46, -45, -45, -44, -42, -41, -40, -40, -39, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -30, -29, -28, -27, -26, -24, -22, -21, -20, -19, -17, -15, -13, -15, -18, -22, -24, -24, -22, -21, -20, -20, -21, -21, -21, -21, -20, -19, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -16, -15, -16, -16, -16, -15, -14, -14, -14, -14, -15, -15, -15, -15, -15, -14, -14, -14, -13, -11, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -2,  -3,  -2,  -2,  -1,  -0,   0,   1,   1,   2,   2,   2,   3,   3,   4,   4,   4,   5,   6,   6,   7,   7,   7,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  11,  10,  10,   9,   9,   9,   9,   8,   8,   7,   7,   6,   6,   6,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   2,   2,   1,   1,  -0,  -1,  -2,  -2,  -2,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -22, -22, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -43, -44, -44, -45, -46, -47, -49, -50, -50, -51, -51, -52, -53, -54, -55, -55, -56, -56, -57, -57, -57, -56, -56, -56, -55, -55, -54, -53, -52, -52, -53, -54, -55, -55, -54, -53, -53, -53, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -55, -56, -56,
+  /* -77.0 */ -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -59, -59, -59, -58, -57, -57, -57, -57, -56, -56, -56, -56, -55, -55, -55, -55, -54, -53, -53, -52, -51, -50, -49, -48, -47, -46, -46, -45, -44, -43, -43, -43, -42, -42, -41, -40, -39, -38, -37, -36, -36, -37, -37, -38, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -25, -24, -23, -22, -21, -21, -20, -19, -18, -18, -18, -20, -20, -20, -18, -17, -16, -17, -19, -21, -21, -20, -19, -19, -18, -18, -18, -17, -17, -17, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10,  -9,  -7,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -2,  -1,   0,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   2,   2,   2,   1,   1,   2,   2,   3,   4,   4,   4,   5,   5,   6,   6,   6,   6,   7,   8,   9,   9,  10,  10,  10,  11,  11,  12,  12,  13,  13,  13,  13,  13,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  10,  10,   9,   9,  10,  10,  10,   9,   8,   7,   7,   6,   6,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   2,   2,   2,   1,   1,   0,   0,  -0,  -1,  -2,  -3,  -4,  -5,  -7,  -8,  -9, -10, -12, -14, -16, -18, -19, -19, -19, -19, -20, -20, -21, -22, -24, -26, -27, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, -42, -42, -42, -42, -44, -45, -45, -46, -48, -49, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -53, -52, -53, -54, -55, -55, -55, -55, -55, -55, -55, -56, -57, -57, -56, -55, -55, -56, -56, -57, -57, -57, -58,
+  /* -76.0 */ -60, -60, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62, -62, -62, -63, -63, -63, -63, -63, -63, -61, -60, -58, -57, -56, -55, -54, -54, -53, -52, -50, -49, -48, -47, -45, -44, -43, -43, -42, -41, -41, -40, -41, -41, -40, -38, -37, -36, -36, -36, -36, -36, -37, -37, -37, -36, -36, -36, -36, -35, -33, -32, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -22, -22, -21, -20, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -19, -18, -18, -17, -18, -18, -17, -15, -13, -13, -13, -13, -14, -15, -15, -14, -13, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -1,  -1,  -0,   1,   3,   4,   5,   5,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,   7,   7,   8,   8,   8,   9,   9,  10,  10,  10,  11,  12,  12,  12,  13,  13,  13,  14,  14,  15,  15,  15,  15,  15,  15,  15,  14,  13,  12,  13,  13,  13,  13,  12,  12,  12,  13,  13,  13,  13,  12,  12,  12,  12,  12,  13,  13,  13,  14,  13,  13,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  10,   9,   8,   7,   7,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   4,   4,   4,   4,   4,   3,   4,   4,   3,   0,  -2,  -4,  -5,  -5,  -6,  -7,  -8,  -9, -10, -12, -13, -15, -16, -17, -18, -18, -19, -20, -21, -23, -24, -26, -28, -29, -30, -32, -33, -35, -35, -36, -37, -37, -38, -39, -40, -41, -41, -41, -42, -43, -45, -46, -47, -49, -50, -50, -50, -50, -51, -52, -53, -54, -55, -56, -56, -57, -57, -58, -58, -58, -58, -57, -57, -56, -56, -57, -57, -56, -55, -54, -55, -57, -58, -58, -58, -57, -57, -57, -57, -58, -58, -58, -58, -57, -58, -58, -58, -59, -59, -60,
+  /* -75.0 */ -62, -62, -62, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, -64, -64, -64, -64, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -60, -58, -56, -54, -52, -51, -50, -49, -48, -47, -47, -46, -44, -44, -44, -44, -44, -43, -42, -40, -39, -39, -39, -38, -38, -37, -37, -37, -36, -36, -36, -37, -36, -35, -33, -32, -31, -30, -30, -29, -29, -28, -27, -27, -26, -26, -26, -26, -25, -25, -24, -23, -22, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -17, -16, -16, -15, -15, -16, -15, -13, -12, -10,  -9,  -8,  -7,  -6,  -6,  -5,  -5,  -6,  -9, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   2,   3,   4,   5,   6,   8,   9,  10,  10,  10,  11,  11,  11,  11,  11,  11,  10,   9,   9,   9,  10,  11,  11,  11,  11,  12,  13,  13,  13,  14,  14,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  16,  16,  15,  15,  15,  16,  16,  16,  15,  14,  15,  16,  16,  16,  16,  16,  16,  16,  15,  15,  16,  17,  17,  16,  15,  15,  15,  14,  14,  14,  13,  12,  12,  12,  13,  13,  13,  12,  11,  10,   9,   9,   9,   8,   8,   8,   8,   8,   7,   7,   7,   6,   6,   6,   6,   6,   5,   5,   5,   4,   2,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -11, -12, -14, -15, -16, -17, -18, -19, -21, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -38, -39, -41, -42, -42, -43, -43, -45, -46, -48, -48, -48, -48, -49, -50, -51, -51, -52, -53, -54, -55, -55, -56, -57, -57, -57, -58, -58, -58, -58, -58, -58, -58, -58, -59, -58, -56, -54, -54, -55, -57, -58, -58, -58, -58, -58, -59, -59, -59, -59, -59, -59, -59, -59, -60, -61, -62,
+  /* -74.0 */ -61, -62, -63, -63, -64, -65, -65, -65, -65, -66, -66, -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -63, -63, -63, -63, -62, -62, -61, -61, -60, -59, -59, -58, -58, -57, -56, -55, -53, -51, -50, -49, -49, -49, -49, -47, -45, -43, -43, -43, -41, -40, -39, -39, -38, -38, -37, -37, -37, -37, -38, -38, -38, -36, -35, -33, -32, -31, -31, -30, -30, -29, -28, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -19, -19, -18, -18, -18, -17, -16, -16, -16, -16, -17, -16, -16, -14, -13, -13, -13, -12, -11, -10,  -8,  -7,  -6,  -6,  -5,  -3,  -2,  -1,  -1,  -1,  -2,  -4,  -6,  -7,  -7,  -7,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -2,  -1,  -1,  -0,  -0,  -1,  -1,  -1,  -2,  -2,  -1,  -1,  -0,   1,   1,   2,   2,   3,   3,   3,   4,   5,   6,   7,   7,   8,   9,  10,  11,  13,  14,  14,  13,  13,  12,  11,  11,  12,  13,  14,  14,  15,  15,  16,  16,  16,  17,  17,  18,  18,  18,  18,  19,  19,  19,  19,  19,  18,  18,  18,  18,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  19,  19,  20,  20,  20,  20,  20,  19,  18,  18,  18,  19,  19,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  17,  16,  14,  12,  12,  12,  13,  13,  13,  12,  11,  10,  10,   9,   9,   9,   8,   8,   7,   7,   6,   5,   5,   4,   3,   1,  -0,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -11, -12, -14, -15, -17, -18, -20, -21, -24, -26, -27, -28, -29, -29, -30, -31, -32, -33, -34, -35, -36, -36, -37, -38, -39, -40, -41, -42, -42, -42, -44, -46, -47, -46, -45, -46, -47, -49, -50, -50, -50, -51, -51, -52, -53, -55, -56, -56, -57, -57, -58, -58, -58, -58, -59, -59, -59, -58, -57, -55, -53, -50, -48, -49, -53, -56, -58, -59, -58, -59, -59, -59, -59, -59, -59, -60, -60, -60, -61, -61,
+  /* -73.0 */ -61, -61, -62, -63, -64, -64, -65, -65, -66, -66, -66, -66, -66, -65, -65, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -62, -62, -61, -61, -60, -60, -59, -58, -58, -57, -57, -56, -55, -55, -54, -53, -52, -52, -51, -50, -50, -49, -47, -46, -45, -44, -42, -40, -40, -40, -39, -38, -38, -37, -36, -36, -35, -35, -35, -34, -34, -33, -33, -32, -32, -31, -31, -29, -28, -27, -26, -25, -25, -24, -23, -22, -22, -22, -21, -21, -21, -20, -18, -18, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -5,  -3,  -2,  -1,   0,   1,   2,   3,   3,   2,  -1,  -3,  -4,  -4,  -4,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -2,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,   0,   1,   2,   3,   4,   6,   7,   7,   7,   7,   8,   8,   8,   9,  11,  13,  15,  15,  14,  13,  12,  13,  13,  14,  15,  16,  17,  18,  18,  19,  18,  18,  18,  18,  19,  19,  19,  19,  19,  20,  20,  20,  20,  20,  19,  19,  20,  23,  23,  22,  21,  21,  21,  20,  21,  22,  22,  22,  21,  22,  22,  23,  23,  24,  23,  22,  22,  21,  21,  21,  22,  22,  21,  21,  20,  20,  19,  19,  19,  19,  19,  19,  20,  21,  21,  20,  20,  20,  20,  20,  19,  17,  14,  12,  13,  14,  15,  16,  16,  14,  13,  13,  13,  12,  11,  11,  10,   9,   8,   7,   6,   5,   5,   4,   3,   2,   0,  -0,  -1,  -3,  -5,  -7,  -8,  -9, -11, -13, -15, -17, -18, -20, -22, -24, -27, -28, -29, -28, -29, -30, -31, -31, -32, -33, -33, -34, -35, -36, -37, -38, -39, -40, -40, -38, -39, -41, -43, -43, -43, -43, -45, -46, -48, -50, -49, -49, -49, -50, -51, -52, -53, -54, -55, -56, -57, -57, -57, -58, -58, -58, -59, -58, -58, -56, -55, -54, -52, -51, -51, -52, -55, -58, -58, -57, -57, -58, -58, -58, -58, -59, -60, -61, -61, -61, -61,
+  /* -72.0 */ -62, -62, -62, -62, -63, -64, -65, -66, -66, -66, -66, -65, -65, -65, -65, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -60, -60, -59, -59, -59, -58, -57, -56, -56, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -41, -40, -39, -38, -37, -35, -34, -33, -33, -33, -33, -32, -32, -31, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -23, -22, -21, -21, -22, -22, -22, -20, -18, -17, -17, -17, -16, -15, -15, -15, -14, -13, -13, -12, -12, -11, -10,  -9,  -7,  -6,  -4,  -2,  -0,   2,   2,   3,   4,   6,   7,   7,   6,   3,   1,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   1,   2,   4,   6,   7,   8,   8,   8,   9,  10,  10,  10,  12,  14,  14,  13,  13,  13,  12,  12,  13,  13,  14,  16,  17,  18,  17,  17,  16,  15,  16,  15,  15,  16,  16,  16,  17,  18,  17,  17,  18,  19,  20,  21,  23,  23,  21,  20,  21,  22,  22,  22,  22,  23,  25,  26,  26,  26,  26,  26,  25,  25,  24,  22,  21,  22,  23,  24,  24,  24,  24,  23,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  20,  18,  16,  14,  13,  13,  13,  13,  14,  15,  15,  15,  15,  15,  14,  13,  13,  12,  11,  10,   9,   8,   6,   5,   5,   4,   3,   2,   1,  -1,  -3,  -5,  -6,  -8,  -9, -11, -12, -14, -16, -17, -19, -20, -22, -24, -26, -27, -27, -28, -29, -30, -31, -32, -32, -32, -32, -33, -34, -35, -36, -37, -38, -37, -37, -38, -39, -40, -40, -41, -42, -43, -45, -48, -50, -51, -51, -50, -50, -51, -52, -52, -53, -54, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -53, -55, -56, -57, -56, -55, -55, -56, -55, -53, -54, -56, -58, -58, -58, -59, -60, -61, -61, -62, -62,
+  /* -71.0 */ -61, -61, -62, -63, -64, -65, -65, -65, -64, -65, -66, -65, -64, -64, -64, -64, -63, -63, -63, -63, -62, -62, -62, -61, -61, -61, -61, -60, -60, -59, -59, -58, -58, -57, -57, -56, -56, -55, -54, -53, -53, -52, -51, -51, -50, -49, -48, -47, -47, -46, -45, -44, -43, -43, -42, -42, -41, -40, -40, -40, -39, -39, -38, -38, -37, -36, -36, -35, -34, -34, -33, -32, -32, -30, -28, -27, -27, -26, -25, -24, -24, -23, -22, -22, -22, -21, -20, -18, -17, -17, -16, -15, -14, -14, -14, -14, -14, -13, -12, -11, -11, -10, -10,  -8,  -7,  -6,  -4,  -3,  -1,   0,   3,   4,   5,   7,  10,  11,  11,  10,   8,   5,   4,   3,   2,   1,   1,  -0,  -1,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,   5,   7,   8,  10,  11,  11,  11,  11,  11,  11,  10,  11,  11,  11,  13,  13,  13,  12,  13,  13,  14,  14,  14,  13,  12,  12,  11,  11,  11,  12,  13,  14,  15,  16,  16,  16,  18,  20,  22,  22,  22,  22,  21,  20,  20,  21,  22,  22,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  24,  25,  25,  26,  26,  25,  24,  23,  23,  23,  23,  22,  23,  23,  22,  21,  23,  25,  25,  25,  23,  21,  18,  15,  15,  16,  16,  16,  16,  16,  16,  15,  16,  16,  15,  15,  14,  13,  12,  11,  10,   9,   8,   7,   6,   5,   3,   1,  -1,  -2,  -4,  -5,  -6,  -7,  -9, -10, -11, -13, -14, -15, -17, -18, -19, -20, -22, -24, -25, -26, -27, -27, -28, -29, -30, -31, -31, -32, -32, -33, -34, -34, -35, -35, -36, -37, -38, -39, -39, -40, -42, -43, -44, -46, -47, -48, -49, -49, -50, -51, -52, -52, -52, -53, -55, -56, -57, -57, -57, -58, -57, -57, -57, -56, -54, -55, -57, -59, -59, -60, -59, -58, -58, -58, -57, -57, -58, -59, -59, -59, -59, -60, -61, -61, -61, -61,
+  /* -70.0 */ -62, -62, -63, -64, -64, -64, -64, -64, -63, -63, -63, -63, -63, -63, -62, -62, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, -60, -59, -58, -58, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -50, -49, -48, -47, -47, -46, -45, -45, -44, -43, -42, -41, -40, -40, -40, -40, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -31, -31, -30, -29, -28, -27, -26, -26, -27, -27, -27, -25, -22, -21, -22, -22, -21, -19, -17, -15, -13, -12, -11, -10, -10, -10, -10,  -9,  -7,  -6,  -4,  -4,  -3,  -2,   0,   2,   4,   5,   7,  10,  12,  13,  13,  11,   8,   6,   5,   4,   4,   4,   2,   1,  -1,  -1,  -1,  -0,   0,   1,   1,   1,   1,   2,   2,   2,   2,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   4,   5,   6,   7,   8,   9,  10,  10,  10,  10,  11,  11,  10,  11,  13,  14,  14,  14,  15,  15,  15,  15,  15,  14,  14,  14,  14,  16,  17,  17,  17,  18,  18,  17,  16,  16,  17,  19,  20,  21,  21,  21,  21,  20,  20,  21,  21,  20,  21,  22,  21,  21,  20,  19,  20,  21,  22,  23,  25,  27,  27,  26,  27,  27,  26,  27,  27,  28,  28,  28,  27,  26,  26,  26,  25,  26,  26,  25,  26,  28,  28,  26,  24,  22,  20,  17,  17,  17,  17,  17,  17,  16,  16,  16,  15,  16,  16,  15,  14,  14,  13,  12,  11,  11,   9,   8,   8,   7,   6,   4,   3,   1,  -1,  -2,  -4,  -6,  -7,  -9, -10, -12, -13, -14, -16, -17, -18, -18, -19, -19, -22, -24, -24, -25, -26, -27, -28, -29, -30, -30, -31, -32, -32, -33, -34, -34, -36, -37, -37, -38, -38, -39, -42, -44, -44, -43, -43, -44, -45, -46, -47, -49, -51, -51, -51, -52, -54, -55, -55, -56, -57, -56, -56, -56, -56, -55, -55, -56, -57, -57, -57, -57, -57, -58, -59, -59, -59, -59, -58, -58, -59, -59, -59, -60, -60, -61, -61, -62,
+  /* -69.0 */ -61, -61, -61, -62, -63, -63, -63, -63, -62, -61, -61, -60, -60, -60, -60, -59, -59, -59, -59, -59, -59, -59, -58, -59, -58, -58, -57, -57, -57, -56, -56, -55, -55, -54, -54, -53, -52, -52, -51, -51, -50, -49, -49, -48, -47, -46, -45, -45, -44, -43, -42, -42, -41, -40, -40, -39, -39, -38, -37, -36, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -29, -29, -28, -28, -27, -26, -26, -25, -25, -25, -24, -22, -21, -19, -17, -16, -16, -16, -15, -14, -14, -13, -12, -11,  -9,  -8,  -7,  -7,  -6,  -4,  -3,  -2,   0,   3,   4,   5,   6,   7,   9,  11,  12,  11,   9,   8,   7,   7,   6,   7,   7,   6,   5,   3,   3,   3,   4,   4,   4,   5,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,   5,   4,   4,   3,   3,   3,   3,   2,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   5,   5,   5,   5,   5,   6,   6,   7,   7,   8,   8,   9,  10,   9,   9,   9,   9,  10,  11,  10,  10,  11,  11,  12,  13,  13,  14,  14,  14,  15,  16,  15,  15,  16,  16,  16,  15,  15,  15,  16,  16,  16,  17,  17,  18,  18,  18,  19,  21,  23,  23,  23,  24,  24,  22,  21,  21,  21,  23,  24,  24,  25,  27,  28,  28,  28,  26,  27,  29,  31,  33,  34,  32,  30,  30,  30,  29,  28,  28,  27,  27,  28,  29,  29,  27,  25,  23,  22,  20,  19,  18,  17,  16,  16,  16,  16,  17,  17,  17,  16,  15,  14,  14,  13,  13,  12,  11,  11,  10,   9,   9,   8,   8,   7,   5,   2,   0,  -2,  -5,  -6,  -8, -10, -11, -13, -15, -16, -17, -18, -18, -19, -19, -20, -22, -23, -24, -25, -26, -26, -27, -28, -29, -30, -30, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -40, -43, -43, -42, -42, -43, -44, -44, -46, -47, -48, -50, -51, -51, -52, -53, -53, -54, -54, -53, -53, -53, -53, -54, -55, -55, -55, -56, -57, -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, -59, -60, -60, -60, -60, -61, -61,
+  /* -68.0 */ -58, -59, -60, -61, -61, -62, -61, -60, -59, -58, -58, -58, -58, -58, -57, -57, -57, -56, -56, -56, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -53, -53, -52, -52, -51, -50, -50, -49, -49, -48, -48, -47, -46, -46, -45, -44, -44, -43, -42, -41, -40, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -17, -16, -15, -14, -14, -13, -12, -11, -11, -10,  -9,  -8,  -7,  -5,  -3,  -1,   1,   2,   3,   5,   6,   7,   7,   8,   8,   9,   9,   9,   8,   9,   8,   9,  10,   9,   8,   7,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   7,   8,   8,   8,   9,  10,  10,  10,  10,  11,  11,  11,  12,  12,  12,  13,  13,  14,  14,  15,  16,  15,  14,  15,  15,  15,  14,  14,  15,  15,  15,  15,  15,  16,  16,  16,  16,  17,  17,  18,  19,  22,  23,  23,  23,  24,  25,  25,  25,  25,  25,  24,  25,  26,  26,  27,  29,  30,  32,  35,  36,  37,  38,  38,  36,  34,  34,  34,  32,  31,  30,  30,  30,  29,  28,  27,  27,  25,  24,  23,  21,  20,  19,  18,  17,  17,  17,  18,  17,  16,  15,  15,  14,  13,  13,  12,  10,  10,  11,   9,   9,  10,   9,   7,   6,   4,   2,   1,  -2,  -3,  -5,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -18, -18, -18, -19, -22, -24, -25, -26, -26, -27, -28, -29, -29, -29, -30, -31, -34, -35, -36, -37, -37, -37, -37, -37, -39, -41, -41, -41, -41, -41, -43, -44, -45, -46, -48, -49, -50, -51, -52, -52, -52, -53, -53, -52, -51, -51, -51, -51, -53, -53, -54, -55, -55, -55, -55, -55, -55, -55, -55, -56, -56, -57, -57, -57, -58, -58, -59, -59, -59, -58,
+  /* -67.0 */ -58, -58, -59, -58, -58, -57, -56, -56, -56, -56, -56, -55, -55, -55, -55, -54, -54, -54, -54, -54, -54, -54, -53, -53, -53, -52, -52, -52, -51, -51, -51, -51, -50, -49, -49, -48, -47, -47, -46, -46, -46, -46, -45, -45, -44, -44, -43, -42, -42, -41, -40, -39, -38, -38, -37, -37, -36, -36, -36, -35, -35, -35, -34, -34, -33, -32, -32, -31, -31, -30, -29, -29, -29, -28, -28, -27, -27, -27, -26, -26, -25, -25, -24, -23, -22, -21, -21, -20, -19, -18, -17, -16, -16, -14, -13, -13, -12, -11, -10, -10,  -9,  -7,  -6,  -5,  -4,  -2,  -1,   2,   4,   5,   6,   8,   9,   9,   9,  10,  11,  12,  12,  11,  11,  11,  12,  12,  13,  12,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   9,   9,  10,  10,  11,  11,  11,  11,  12,  13,  13,  13,  14,  15,  15,  15,  16,  16,  16,  16,  16,  16,  15,  16,  16,  16,  16,  16,  15,  15,  16,  16,  17,  17,  18,  18,  18,  18,  20,  22,  22,  22,  23,  23,  23,  24,  25,  26,  26,  26,  26,  27,  29,  31,  32,  33,  34,  36,  39,  41,  41,  39,  35,  33,  32,  31,  30,  30,  29,  28,  27,  26,  26,  24,  23,  24,  25,  25,  24,  22,  20,  19,  18,  18,  18,  17,  16,  16,  16,  15,  14,  14,  12,  10,  10,  10,   9,   8,   8,   6,   4,   3,   1,  -1,  -1,  -2,  -3,  -3,  -6,  -8,  -9, -11, -12, -13, -15, -17, -18, -18, -18, -17, -18, -22, -25, -26, -27, -28, -28, -28, -29, -29, -30, -31, -32, -34, -36, -37, -37, -36, -37, -38, -39, -40, -40, -40, -40, -40, -41, -42, -43, -44, -45, -47, -48, -49, -49, -49, -49, -49, -49, -49, -49, -48, -49, -50, -50, -50, -51, -51, -51, -50, -50, -51, -52, -53, -53, -53, -54, -54, -55, -56, -56, -56, -57, -57, -57, -58, -58,
+  /* -66.0 */ -55, -54, -53, -53, -54, -54, -54, -54, -54, -53, -53, -53, -53, -52, -52, -52, -52, -52, -52, -52, -52, -51, -51, -50, -50, -50, -50, -50, -49, -49, -48, -48, -47, -47, -46, -45, -45, -45, -44, -43, -43, -43, -43, -43, -42, -42, -42, -41, -41, -40, -39, -38, -38, -37, -36, -36, -35, -35, -34, -34, -34, -33, -33, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -27, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -19, -17, -16, -16, -15, -14, -13, -12, -12, -11, -10,  -8,  -7,  -7,  -5,  -4,  -3,  -2,  -0,   1,   2,   5,   7,   9,  10,  11,  12,  13,  14,  15,  16,  15,  15,  14,  14,  15,  16,  16,  14,  13,  13,  12,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  10,  10,  10,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   8,   7,   7,   7,   7,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,  10,  10,  11,  11,  12,  13,  14,  15,  15,  15,  15,  15,  15,  16,  16,  17,  17,  18,  19,  18,  18,  18,  17,  17,  17,  18,  18,  18,  17,  17,  18,  18,  18,  19,  19,  20,  19,  19,  22,  23,  23,  23,  23,  23,  24,  24,  25,  25,  26,  27,  27,  28,  29,  30,  30,  31,  33,  34,  35,  37,  36,  34,  32,  31,  30,  28,  27,  26,  25,  25,  25,  25,  24,  24,  24,  23,  22,  21,  20,  20,  19,  18,  17,  15,  15,  15,  16,  16,  15,  14,  13,  12,  12,  10,   9,   8,   7,   5,   3,   1,   0,  -0,  -1,  -3,  -2,  -1,  -2,  -3,  -6,  -8, -10, -12, -14, -14, -15, -15, -16, -18, -19, -21, -22, -23, -24, -25, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -36, -37, -37, -38, -39, -39, -40, -41, -42, -42, -42, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -46, -47, -49, -48, -47, -47, -47, -47, -47, -48, -48, -48, -48, -49, -49, -49, -50, -51, -52, -52, -52, -53, -54, -54, -55, -55, -55, -55, -55, -55,
+  /* -65.0 */ -52, -51, -51, -52, -51, -51, -51, -51, -51, -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -49, -49, -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -42, -42, -41, -41, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -28, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -20, -20, -18, -17, -17, -16, -15, -15, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -1,   0,   1,   2,   4,   5,   6,   8,  11,  13,  14,  15,  15,  16,  18,  18,  18,  18,  18,  18,  19,  19,  16,  15,  15,  14,  13,  13,  14,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  12,  13,  12,  12,  12,  11,  11,  11,  10,  10,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  11,  11,  11,  12,  12,  14,  15,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  19,  19,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  20,  20,  20,  21,  21,  21,  20,  21,  23,  24,  24,  25,  26,  26,  26,  27,  28,  28,  28,  28,  29,  30,  30,  31,  30,  30,  30,  31,  31,  30,  30,  30,  29,  29,  28,  27,  27,  27,  27,  27,  26,  25,  25,  25,  24,  23,  22,  21,  20,  20,  20,  19,  18,  18,  16,  15,  14,  14,  14,  13,  12,  11,  10,   8,   7,   6,   5,   4,   4,   3,   3,   1,   0,  -1,  -1,  -2,  -4,  -7,  -8,  -9, -11, -12, -13, -15, -17, -18, -19, -19, -20, -20, -21, -22, -25, -27, -29, -31, -32, -32, -32, -33, -33, -34, -35, -35, -35, -36, -36, -37, -38, -39, -41, -42, -43, -44, -44, -44, -44, -45, -45, -45, -45, -46, -46, -46, -46, -45, -45, -44, -44, -44, -44, -44, -44, -44, -44, -44, -45, -46, -46, -47, -47, -48, -49, -49, -50, -51, -51, -52, -52, -52, -52, -52, -52, -52, -52,
+  /* -64.0 */ -51, -51, -50, -50, -50, -50, -50, -49, -49, -49, -48, -48, -48, -48, -47, -47, -47, -47, -47, -46, -46, -45, -45, -45, -45, -45, -44, -43, -43, -43, -43, -42, -42, -42, -42, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -22, -21, -21, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10,  -9,  -8,  -6,  -5,  -4,  -3,  -1,   0,   1,   2,   3,   4,   6,   7,   8,  10,  11,  14,  16,  17,  18,  18,  19,  21,  21,  21,  21,  22,  22,  20,  18,  17,  15,  15,  16,  16,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  14,  14,  13,  13,  12,  12,  12,  12,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  12,  13,  13,  14,  16,  17,  17,  17,  17,  18,  18,  18,  18,  19,  19,  20,  20,  20,  21,  21,  20,  20,  20,  20,  21,  21,  21,  21,  21,  22,  22,  22,  23,  23,  23,  23,  24,  25,  26,  27,  27,  28,  28,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  30,  30,  29,  29,  28,  28,  27,  27,  27,  26,  26,  26,  25,  24,  23,  23,  22,  22,  22,  21,  20,  19,  18,  16,  15,  15,  14,  13,  12,  11,  10,   8,   7,   5,   4,   3,   3,   2,   2,   0,   0,  -0,  -2,  -4,  -8,  -9, -10, -11, -12, -13, -16, -18, -19, -20, -21, -22, -22, -22, -23, -25, -27, -28, -30, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -44, -44, -43, -43, -42, -42, -42, -42, -42, -42, -41, -41, -41, -41, -41, -41, -41, -41, -42, -43, -43, -44, -45, -45, -46, -47, -47, -48, -48, -48, -48, -49, -50, -50, -50, -51, -51, -51,
+  /* -63.0 */ -50, -50, -49, -49, -49, -49, -48, -48, -47, -47, -47, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -38, -38, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, -33, -33, -33, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -27, -27, -26, -26, -26, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -12, -11, -10, -10,  -8,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   3,   4,   5,   6,   8,   9,  10,  12,  13,  14,  15,  15,  17,  19,  21,  22,  23,  24,  24,  23,  22,  22,  21,  20,  20,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  15,  15,  14,  14,  14,  13,  13,  13,  12,  12,  12,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  13,  14,  14,  14,  15,  16,  17,  17,  18,  18,  19,  20,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  24,  24,  24,  25,  24,  25,  26,  27,  27,  28,  29,  29,  30,  30,  31,  31,  30,  30,  31,  31,  30,  29,  29,  29,  29,  29,  29,  30,  30,  30,  31,  30,  30,  30,  29,  29,  29,  28,  27,  27,  26,  26,  26,  25,  25,  24,  24,  24,  23,  22,  21,  20,  18,  18,  18,  17,  16,  14,  13,  12,  10,   8,   7,   6,   4,   3,   2,   0,  -1,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -12, -13, -13, -15, -16, -18, -20, -21, -22, -23, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -39, -39, -39, -38, -38, -37, -38, -38, -37, -38, -38, -39, -40, -40, -41, -42, -42, -43, -43, -44, -44, -45, -46, -47, -49, -49, -50, -50, -50, -50, -50, -50,
+  /* -62.0 */ -49, -49, -49, -48, -48, -48, -47, -47, -46, -46, -45, -45, -44, -44, -43, -43, -42, -42, -42, -41, -41, -40, -40, -40, -39, -39, -38, -38, -38, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, -30, -30, -30, -29, -29, -28, -27, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -21, -21, -21, -20, -19, -19, -18, -17, -16, -16, -15, -15, -14, -13, -12, -12, -11, -10, -10,  -9,  -8,  -7,  -6,  -5,  -3,  -2,  -1,   1,   2,   3,   4,   6,   7,   8,  10,  12,  13,  14,  15,  15,  14,  14,  15,  18,  21,  22,  22,  22,  23,  23,  22,  21,  20,  20,  20,  20,  21,  22,  23,  22,  22,  21,  19,  19,  19,  20,  20,  20,  20,  19,  20,  19,  20,  19,  19,  19,  19,  18,  18,  18,  17,  16,  16,  16,  15,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  15,  16,  17,  18,  19,  20,  20,  21,  22,  23,  23,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  25,  25,  25,  26,  26,  26,  26,  27,  27,  28,  29,  30,  30,  31,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  30,  30,  31,  31,  31,  31,  31,  31,  31,  30,  30,  30,  29,  28,  28,  28,  28,  27,  27,  26,  26,  25,  25,  24,  23,  22,  22,  22,  21,  21,  20,  19,  17,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -0,  -1,  -2,  -3,  -5,  -6,  -7,  -8,  -9,  -9, -10, -11, -13, -14, -15, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -38, -38, -38, -39, -39, -38, -37, -37, -37, -37, -37, -36, -36, -36, -36, -35, -35, -34, -35, -35, -35, -35, -35, -36, -37, -37, -38, -39, -39, -40, -41, -42, -43, -45, -47, -48, -48, -48, -48, -49, -49, -49, -49, -49, -49,
+  /* -61.0 */ -48, -47, -47, -47, -47, -46, -46, -45, -45, -45, -44, -43, -43, -43, -42, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -36, -35, -35, -35, -35, -34, -34, -34, -34, -34, -34, -33, -33, -33, -33, -32, -32, -32, -32, -32, -31, -30, -30, -30, -29, -29, -28, -28, -28, -29, -28, -27, -27, -26, -26, -25, -25, -25, -25, -25, -24, -24, -24, -24, -24, -23, -22, -22, -21, -21, -21, -20, -20, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -12, -12, -11, -10,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -0,   1,   2,   3,   5,   7,   8,   9,  11,  12,  14,  15,  17,  17,  18,  18,  18,  17,  16,  15,  16,  21,  23,  24,  24,  22,  21,  21,  21,  21,  23,  25,  26,  26,  24,  21,  18,  20,  20,  21,  22,  21,  22,  22,  22,  22,  22,  22,  22,  21,  19,  17,  17,  17,  16,  17,  18,  18,  18,  17,  17,  16,  16,  16,  16,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  25,  26,  26,  26,  27,  28,  28,  28,  28,  28,  29,  29,  30,  31,  31,  32,  32,  33,  33,  33,  33,  33,  33,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  32,  32,  32,  31,  31,  31,  30,  30,  30,  30,  29,  29,  28,  28,  27,  27,  26,  26,  25,  25,  24,  24,  23,  23,  22,  21,  19,  17,  14,  12,  11,   9,   8,   6,   5,   3,   2,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -8,  -9, -10, -11, -13, -14, -15, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -33, -33, -33, -33, -32, -31, -32, -32, -33, -33, -33, -33, -34, -35, -36, -37, -38, -39, -40, -41, -43, -45, -45, -46, -46, -47, -47, -48, -48, -48, -48, -48, -48, -48,
+  /* -60.0 */ -46, -46, -46, -45, -45, -45, -44, -44, -44, -43, -43, -43, -42, -41, -41, -40, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -34, -33, -33, -33, -32, -32, -32, -32, -31, -31, -31, -31, -31, -30, -30, -30, -30, -30, -29, -29, -29, -28, -28, -27, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -18, -18, -17, -16, -16, -15, -14, -14, -14, -13, -12, -12, -11, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -4,  -2,  -1,   0,   1,   2,   4,   6,   7,   8,   9,  12,  13,  15,  16,  17,  17,  18,  18,  19,  20,  21,  21,  20,  20,  20,  21,  21,  21,  20,  20,  19,  18,  19,  17,  16,  16,  18,  20,  21,  22,  21,  20,  21,  22,  23,  23,  23,  24,  24,  24,  23,  22,  18,  13,  10,  13,  18,  20,  20,  21,  21,  21,  21,  20,  19,  18,  18,  18,  17,  17,  16,  16,  16,  16,  15,  15,  15,  16,  15,  15,  16,  16,  16,  16,  17,  17,  17,  18,  19,  20,  21,  22,  23,  23,  24,  24,  25,  25,  25,  25,  26,  26,  26,  26,  27,  28,  28,  29,  29,  29,  29,  29,  30,  31,  32,  32,  32,  33,  33,  34,  34,  34,  35,  34,  34,  34,  34,  33,  33,  33,  33,  33,  33,  33,  33,  32,  32,  33,  33,  33,  32,  32,  31,  31,  31,  31,  31,  31,  30,  29,  29,  28,  27,  27,  27,  28,  27,  26,  26,  25,  25,  24,  22,  21,  17,  14,  12,  11,  10,   9,   8,   7,   5,   4,   3,   2,   0,  -1,  -2,  -3,  -4,  -5,  -7,  -7,  -8,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -28, -28, -29, -30, -30, -31, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -30, -29, -29, -30, -31, -31, -31, -31, -31, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -44, -44, -45, -46, -46, -46, -47, -47, -47, -47, -46, -46,
+  /* -59.0 */ -45, -44, -44, -44, -44, -43, -43, -43, -42, -42, -41, -41, -41, -40, -39, -39, -38, -37, -37, -36, -35, -35, -34, -33, -33, -32, -32, -31, -31, -30, -30, -30, -30, -29, -29, -29, -29, -29, -28, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -25, -25, -24, -24, -23, -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -21, -20, -20, -19, -20, -19, -18, -17, -17, -16, -16, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10,  -9,  -9,  -8,  -7,  -6,  -6,  -5,  -4,  -3,  -2,  -2,  -1,   1,   2,   3,   4,   6,   7,   9,  11,  12,  13,  15,  16,  17,  17,  18,  19,  20,  19,  19,  20,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  21,  20,  20,  19,  20,  20,  21,  20,  21,  21,  22,  22,  23,  23,  24,  24,  24,  23,  22,  20,  15,   9,  15,  18,  20,  21,  21,  21,  21,  21,  21,  21,  20,  20,  20,  20,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  18,  18,  18,  19,  19,  20,  21,  22,  22,  23,  24,  24,  25,  25,  26,  26,  26,  27,  28,  28,  28,  29,  29,  30,  30,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  36,  36,  36,  36,  36,  36,  36,  35,  35,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  33,  33,  33,  32,  31,  32,  32,  32,  32,  31,  30,  30,  29,  29,  30,  30,  30,  29,  29,  27,  26,  25,  24,  23,  19,  16,  14,  13,  12,  12,  10,   9,   8,   7,   6,   5,   3,   2,   0,  -1,  -2,  -3,  -4,  -6,  -7,  -8,  -8,  -9, -11, -12, -13, -14, -15, -16, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -30, -30, -30, -30, -30, -31, -31, -31, -31, -31, -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -28, -29, -29, -29, -30, -34, -34, -33, -34, -36, -37, -38, -39, -40, -41, -41, -42, -43, -44, -44, -45, -45, -45, -45, -45, -45, -45, -45,
+  /* -58.0 */ -43, -43, -43, -42, -42, -42, -41, -41, -41, -40, -40, -39, -38, -38, -37, -37, -36, -35, -34, -34, -33, -33, -32, -31, -31, -30, -30, -29, -29, -28, -28, -28, -27, -27, -27, -27, -27, -27, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -21, -21, -21, -21, -21, -20, -20, -20, -20, -20, -19, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -15, -14, -14, -13, -13, -12, -11, -11, -11, -10,  -9,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -4,  -3,  -2,  -1,  -0,   1,   1,   3,   4,   5,   7,   8,  10,  11,  13,  13,  15,  15,  16,  16,  17,  18,  19,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  20,  20,  20,  20,  20,  20,  19,  19,  20,  20,  20,  20,  21,  21,  22,  22,  23,  24,  24,  24,  23,  22,  20,  15,  10,  15,  18,  20,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  20,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  20,  21,  22,  23,  23,  24,  25,  26,  26,  27,  28,  27,  28,  28,  29,  29,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  36,  37,  37,  37,  37,  37,  37,  38,  38,  37,  37,  37,  36,  36,  35,  35,  35,  35,  35,  35,  35,  34,  34,  34,  34,  34,  33,  32,  31,  32,  31,  31,  30,  30,  30,  30,  30,  30,  30,  29,  28,  28,  26,  25,  23,  21,  18,  16,  15,  15,  14,  13,  12,  10,   9,   8,   7,   6,   4,   3,   1,  -0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -24, -25, -26, -26, -27, -27, -28, -28, -28, -29, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -26, -26, -26, -26, -26, -26, -27, -27, -28, -28, -32, -32, -28, -31, -32, -34, -35, -36, -37, -38, -39, -39, -41, -41, -42, -42, -42, -42, -42, -42, -43, -43, -43, -43,
+  /* -57.0 */ -40, -40, -40, -40, -39, -39, -39, -39, -39, -38, -37, -37, -36, -36, -35, -35, -34, -33, -33, -32, -31, -31, -30, -30, -29, -28, -28, -27, -27, -27, -26, -26, -26, -25, -25, -25, -25, -25, -25, -24, -23, -23, -22, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -18, -18, -19, -19, -19, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -16, -16, -16, -16, -15, -15, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   6,   6,   7,   8,   8,   9,  12,  14,  13,  14,  15,  16,  17,  18,  19,  20,  20,  20,  20,  19,  18,  19,  19,  18,  18,  18,  19,  19,  18,  19,  18,  18,  18,  19,  19,  20,  20,  20,  21,  21,  21,  22,  23,  23,  23,  23,  22,  20,  16,   8,   9,  16,  19,  20,  20,  20,  20,  20,  21,  21,  21,  21,  22,  22,  23,  23,  24,  24,  24,  25,  24,  23,  23,  23,  23,  22,  22,  22,  22,  21,  20,  20,  19,  20,  20,  20,  20,  21,  22,  23,  25,  25,  26,  27,  28,  28,  29,  29,  29,  29,  30,  30,  31,  32,  32,  33,  34,  34,  35,  36,  36,  37,  38,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  38,  38,  37,  37,  36,  36,  36,  36,  36,  36,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  35,  34,  34,  34,  32,  31,  31,  30,  29,  29,  28,  26,  23,  20,  19,  18,  17,  16,  16,  15,  13,  12,  11,  10,   9,   8,   6,   5,   4,   2,   1,  -1,  -2,  -3,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -25, -26, -26, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -25, -25, -25, -24, -24, -24, -24, -24, -24, -24, -25, -25, -25, -26, -26, -30, -30, -27, -30, -29, -31, -33, -34, -35, -36, -36, -37, -38, -38, -39, -39, -40, -40, -40, -40, -40, -40, -40, -40,
+  /* -56.0 */ -37, -37, -38, -37, -37, -37, -37, -36, -36, -35, -35, -34, -34, -33, -33, -32, -32, -31, -30, -30, -30, -29, -28, -27, -27, -27, -26, -26, -25, -25, -24, -24, -24, -24, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -20, -20, -20, -20, -20, -19, -19, -19, -18, -19, -18, -17, -17, -16, -15, -15, -14, -14, -14, -14, -14, -14, -14, -15, -14, -14, -14, -15, -14, -14, -14, -14, -14, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -2,  -1,   1,   2,   3,   4,   5,   5,   5,   5,   4,   6,  11,  14,  15,  16,  14,  13,  14,  15,  16,  17,  18,  18,  19,  18,  17,  18,  18,  17,  17,  17,  18,  18,  18,  18,  17,  17,  17,  17,  17,  18,  18,  19,  19,  19,  19,  20,  21,  21,  21,  21,  21,  21,  21,  17,   5,   5,  15,  19,  20,  20,  21,  20,  20,  20,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  26,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  23,  22,  22,  22,  22,  22,  22,  23,  24,  25,  26,  27,  28,  29,  29,  30,  31,  31,  31,  31,  32,  31,  32,  33,  34,  35,  35,  36,  37,  37,  38,  39,  40,  41,  41,  41,  42,  41,  41,  41,  41,  41,  41,  40,  40,  39,  39,  39,  38,  38,  37,  37,  37,  36,  36,  35,  35,  35,  35,  36,  36,  35,  34,  34,  33,  33,  33,  33,  32,  31,  31,  30,  29,  27,  24,  22,  20,  19,  19,  18,  17,  16,  15,  14,  13,  12,  10,   9,   8,   7,   5,   4,   3,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -24, -25, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -25, -24, -23, -23, -23, -22, -22, -22, -23, -23, -23, -23, -24, -24, -24, -24, -25, -25, -26, -27, -28, -28, -29, -31, -32, -32, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37,
+  /* -55.0 */ -34, -35, -35, -35, -35, -34, -34, -34, -33, -33, -32, -32, -31, -31, -31, -30, -30, -30, -29, -28, -27, -27, -26, -26, -25, -25, -24, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -16, -15, -15, -14, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10,  -8,  -7,  -6,  -5,  -5,  -5,  -4,  -3,  -3,  -2,  -1,   1,   2,   3,   4,   5,   5,   3,   3,   7,  10,  11,  13,  14,  14,  14,  14,  12,  11,  12,  13,  15,  17,  17,  18,  18,  17,  15,  14,  14,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  17,  16,  17,  19,  21,  23,  21,  17,  11,  12,  10,   8,   7,   4,   3,   8,  15,  18,  20,  21,  20,  20,  21,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  25,  25,  24,  24,  24,  25,  26,  27,  28,  29,  30,  31,  32,  32,  33,  33,  33,  34,  33,  33,  34,  34,  35,  35,  36,  37,  38,  39,  40,  41,  43,  44,  44,  45,  45,  44,  44,  44,  44,  44,  43,  42,  41,  41,  41,  41,  40,  39,  39,  38,  38,  37,  37,  36,  36,  35,  35,  35,  35,  34,  35,  35,  35,  35,  34,  34,  34,  33,  33,  32,  30,  28,  25,  23,  21,  20,  19,  19,  18,  17,  15,  14,  13,  12,  10,   9,   8,   7,   5,   4,   2,   2,   0,  -1,  -2,  -3,  -5,  -6,  -7,  -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -25, -25, -24, -25, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -21, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -22, -23, -26, -26, -27, -27, -28, -27, -26, -25, -26, -28, -30, -32, -33, -34, -34, -33, -33, -33, -34, -34, -34,
+  /* -54.0 */ -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -23, -23, -23, -23, -22, -21, -21, -21, -20, -20, -20, -19, -19, -18, -18, -18, -18, -17, -17, -18, -19, -19, -18, -18, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -11, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -1,   0,   2,   3,   4,   5,   5,   4,   4,   9,  12,  10,   9,  10,  12,  12,  12,  12,  11,  10,   9,  10,  11,  10,  10,  10,   9,   7,   7,   9,  12,  13,  12,  11,  11,  12,  14,  14,  14,  13,  14,  16,  16,  15,  17,  18,  18,  17,  12,  12,  13,  13,  13,  14,  14,  13,  14,  15,  17,  19,  21,  21,  21,  21,  21,  22,  22,  22,  23,  23,  23,  24,  25,  25,  25,  26,  26,  27,  27,  27,  28,  28,  28,  27,  27,  27,  27,  28,  28,  27,  27,  26,  26,  27,  27,  28,  28,  28,  29,  29,  31,  31,  32,  33,  34,  35,  36,  36,  36,  37,  34,  35,  36,  36,  36,  37,  38,  39,  40,  41,  43,  44,  45,  47,  47,  47,  47,  46,  45,  45,  44,  45,  43,  43,  44,  45,  43,  41,  41,  40,  39,  38,  38,  38,  37,  36,  36,  35,  34,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  33,  31,  27,  24,  23,  24,  22,  20,  20,  18,  17,  16,  14,  13,  12,  11,   9,   8,   7,   6,   4,   3,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -20, -21, -22, -22, -23, -23, -24, -24, -25, -24, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -21, -20, -20, -20, -20, -19, -21, -21, -21, -21, -21, -21, -21, -21, -22, -22, -22, -22, -19, -23, -22, -23, -23, -24, -22, -22, -22, -22, -23, -24, -24, -26, -28, -29, -30, -30, -31, -31, -31, -31,
+  /* -53.0 */ -28, -28, -29, -28, -29, -29, -28, -28, -28, -28, -27, -27, -26, -26, -26, -26, -25, -25, -25, -24, -24, -23, -23, -22, -22, -23, -23, -22, -21, -21, -21, -20, -20, -20, -20, -19, -19, -19, -18, -18, -18, -18, -18, -19, -20, -20, -20, -19, -18, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   5,   5,   9,  11,  10,  10,   9,   9,  11,  12,  12,  12,  13,  13,  12,  12,  11,  11,  11,  10,  10,   8,   6,   5,   5,   6,   7,   6,   4,   6,   8,   6,   4,   4,   6,   6,   4,   3,   3,   5,  10,  11,  12,  13,  15,  15,  16,  16,  16,  16,  16,  16,  17,  19,  19,  20,  20,  21,  21,  22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  27,  27,  28,  28,  28,  28,  27,  27,  27,  27,  27,  27,  26,  26,  26,  27,  27,  27,  28,  29,  30,  31,  32,  32,  33,  34,  35,  35,  36,  36,  37,  38,  38,  38,  37,  36,  37,  37,  37,  38,  39,  40,  41,  42,  44,  45,  46,  47,  48,  48,  48,  51,  50,  47,  46,  47,  45,  44,  45,  43,  43,  42,  41,  41,  41,  39,  38,  37,  37,  36,  35,  35,  35,  35,  35,  35,  34,  34,  35,  37,  40,  39,  37,  35,  34,  32,  30,  28,  26,  24,  23,  22,  20,  19,  17,  16,  15,  13,  12,  11,   9,   8,   7,   5,   4,   3,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -24, -24, -24, -24, -24, -23, -23, -23, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -19, -19, -19, -19, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, -17, -19, -19, -20, -21, -20, -19, -19, -19, -18, -18, -19, -20, -21, -23, -26, -27, -27, -28, -28, -28,
+  /* -52.0 */ -25, -25, -25, -26, -26, -26, -26, -25, -25, -24, -24, -24, -24, -24, -23, -23, -23, -23, -22, -22, -21, -21, -21, -22, -22, -21, -20, -20, -20, -20, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -19, -20, -19, -19, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -5,  -5,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   5,   5,   7,  13,  13,  13,  11,  10,   9,  10,  10,  10,  11,  12,  13,  14,  14,  14,  12,  12,  12,  12,  11,  10,   9,   8,   7,   6,   6,   6,   5,   4,   4,   5,   5,   5,   5,   5,   6,   7,   8,  10,  11,  10,  13,  15,  15,  15,  16,  15,  15,  15,  18,  17,  18,  19,  19,  20,  20,  21,  22,  22,  23,  24,  24,  25,  25,  26,  26,  27,  27,  27,  28,  28,  28,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  27,  29,  30,  31,  31,  33,  33,  34,  35,  35,  36,  36,  36,  36,  37,  37,  37,  38,  37,  36,  39,  39,  38,  39,  40,  41,  43,  44,  45,  46,  47,  49,  49,  47,  47,  47,  47,  47,  46,  45,  44,  44,  43,  43,  43,  42,  42,  41,  40,  39,  38,  37,  37,  36,  36,  36,  35,  35,  35,  34,  35,  37,  38,  38,  38,  37,  36,  33,  30,  29,  28,  27,  25,  23,  22,  21,  19,  18,  16,  15,  14,  12,  11,   9,   8,   6,   5,   4,   2,   1,  -1,  -2,  -3,  -5,  -6,  -7,  -8, -10, -11, -12, -13, -14, -16, -17, -18, -19, -19, -20, -21, -21, -22, -22, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -15, -16, -17, -17, -18, -18, -15, -16, -16, -15, -16, -16, -17, -17, -19, -21, -23, -24, -24, -24, -25,
+  /* -51.0 */ -21, -21, -21, -21, -22, -23, -23, -22, -22, -21, -21, -21, -21, -21, -21, -21, -21, -21, -20, -20, -20, -20, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -18, -18, -17, -17, -18, -19, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -15, -14, -13, -13, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -2,  -1,  -0,   1,   2,   2,   3,   5,   5,   5,   5,   9,  14,  15,  15,  13,  11,  10,  10,  10,  10,  11,  12,  13,  13,  12,  12,  13,  13,  13,  12,  11,  10,  10,   9,   7,   6,   6,   6,   6,   5,   6,   6,   8,   9,   8,   7,   6,   6,   7,   7,   8,   8,  10,  10,  11,  12,  12,  13,  13,  15,  16,  17,  17,  18,  19,  20,  20,  21,  22,  23,  23,  24,  25,  25,  26,  26,  26,  27,  27,  28,  28,  27,  27,  27,  27,  27,  26,  26,  25,  25,  25,  25,  25,  25,  26,  26,  27,  27,  27,  29,  31,  31,  32,  32,  33,  34,  34,  34,  35,  35,  36,  36,  37,  37,  38,  36,  38,  40,  40,  39,  40,  41,  42,  43,  44,  46,  46,  46,  47,  46,  47,  46,  46,  46,  45,  45,  44,  44,  44,  44,  43,  43,  41,  41,  40,  39,  38,  38,  37,  37,  36,  36,  37,  37,  36,  35,  38,  39,  38,  38,  37,  36,  33,  31,  30,  29,  28,  27,  25,  24,  22,  20,  19,  18,  16,  15,  13,  12,  11,   9,   8,   6,   5,   3,   2,   0,  -1,  -3,  -4,  -5,  -7,  -8,  -9, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -22, -23, -23, -23, -24, -24, -24, -23, -23, -23, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -19, -18, -18, -18, -17, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -16, -15, -14, -12, -12, -14, -14, -11, -12, -12, -12, -13, -13, -14, -14, -15, -16, -18, -20, -20, -21, -21,
+  /* -50.0 */ -17, -17, -17, -15, -17, -19, -20, -19, -19, -19, -19, -19, -19, -19, -19, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -16, -16, -17, -17, -16, -17, -18, -18, -18, -17, -17, -17, -18, -18, -18, -18, -17, -17, -17, -16, -15, -14, -14, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -1,  -0,   0,   1,   2,   3,   4,   5,   6,   5,   6,  10,  13,  16,  16,  14,  13,  11,  10,  10,  11,  11,  11,  12,  13,  13,  13,  12,  12,  11,  11,   9,   8,   6,   4,   3,   3,   2,   2,   2,   2,   2,   3,   5,   6,   6,   6,   3,   3,   3,   4,   5,   6,   7,   8,   9,  10,  11,  11,  12,  14,  15,  16,  17,  18,  19,  20,  20,  21,  22,  23,  23,  25,  25,  26,  26,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  25,  25,  25,  25,  24,  25,  25,  24,  25,  24,  25,  25,  26,  26,  27,  28,  30,  31,  31,  32,  33,  33,  34,  34,  35,  35,  35,  36,  37,  37,  38,  38,  40,  40,  40,  41,  41,  42,  43,  43,  44,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  44,  44,  44,  43,  43,  42,  41,  40,  39,  38,  37,  37,  36,  39,  40,  39,  37,  39,  41,  40,  37,  37,  36,  35,  33,  32,  31,  30,  29,  27,  26,  24,  23,  22,  20,  19,  17,  16,  14,  13,  11,  10,   9,   7,   6,   4,   2,   1,  -1,  -2,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -23, -23, -23, -22, -22, -22, -21, -20, -20, -19, -19, -18, -18, -19, -18, -18, -17, -17, -17, -18, -18, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -15, -14, -13, -13, -11, -10, -12, -10,  -9, -10, -10, -10, -10, -10, -10, -11, -12, -13, -13, -14, -15, -17,
+  /* -49.0 */ -10, -12, -14, -15, -16, -16, -16, -16, -17, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -17, -16, -16, -15, -15, -15, -15, -15, -15, -16, -16, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -1,  -1,   0,   1,   2,   3,   3,   4,   5,   6,   6,   6,  10,  15,  16,  17,  16,  15,  13,  12,  12,  11,  11,  11,  11,  12,  11,  11,  11,  10,  10,   9,   7,   6,   3,   1,  -0,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   2,   2,   1,   1,   2,   3,   3,   4,   4,   6,   6,   7,   8,   9,  12,  13,  14,  15,  16,  17,  19,  20,  21,  21,  23,  23,  24,  25,  26,  27,  27,  27,  28,  27,  27,  26,  26,  25,  25,  25,  24,  24,  24,  24,  23,  24,  24,  25,  24,  24,  25,  23,  25,  26,  27,  28,  28,  29,  30,  30,  31,  32,  33,  33,  33,  34,  34,  34,  35,  35,  37,  38,  39,  40,  42,  42,  42,  42,  43,  43,  42,  43,  44,  44,  45,  44,  44,  44,  45,  45,  45,  45,  45,  45,  45,  44,  44,  43,  42,  41,  41,  40,  39,  38,  38,  38,  37,  37,  38,  39,  41,  41,  40,  38,  36,  34,  33,  32,  31,  30,  29,  28,  26,  25,  24,  22,  21,  20,  18,  17,  15,  14,  12,  11,   9,   8,   6,   5,   3,   2,   0,  -2,  -3,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -17, -18, -19, -19, -20, -21, -22, -22, -23, -23, -23, -24, -24, -24, -24, -24, -24, -24, -23, -23, -22, -22, -21, -21, -20, -20, -19, -18, -18, -17, -18, -18, -17, -17, -17, -17, -17, -17, -16, -16, -14, -15, -16, -16, -16, -16, -16, -15, -15, -14, -12, -12, -11, -10, -11,  -8,  -9,  -6,  -7,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -8,  -9,  -9,  -9, -10,
+  /* -48.0 */  -5,  -8, -11, -12, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -14, -13, -14, -14, -14, -14, -14, -15, -15, -16, -16, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -15, -15, -14, -14, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -2,  -2,  -1,  -1,  -0,   1,   2,   2,   3,   4,   5,   6,   7,   7,   7,  11,  15,  16,  17,  18,  16,  15,  14,  12,  11,  11,  11,  11,  11,  11,  11,  10,   8,   7,   5,   4,   2,   1,  -0,  -1,  -2,  -2,  -2,  -3,  -3,  -3,  -2,  -1,  -1,  -1,  -1,  -0,  -0,   0,   1,   2,   2,   3,   4,   6,   7,   8,  10,  11,  13,  14,  15,  16,  18,  19,  20,  21,  22,  23,  24,  25,  26,  26,  27,  28,  28,  28,  27,  27,  26,  25,  25,  24,  24,  24,  24,  23,  23,  23,  22,  23,  23,  24,  24,  26,  25,  26,  26,  26,  27,  28,  29,  30,  30,  31,  32,  32,  32,  32,  33,  33,  33,  34,  34,  35,  37,  39,  40,  41,  44,  44,  44,  43,  43,  43,  43,  44,  44,  44,  43,  44,  44,  45,  45,  45,  45,  45,  45,  45,  44,  44,  43,  43,  42,  41,  40,  38,  38,  37,  36,  36,  36,  39,  39,  40,  40,  39,  37,  35,  33,  32,  31,  30,  29,  28,  27,  25,  24,  23,  22,  20,  19,  17,  16,  15,  13,  11,  10,   8,   7,   5,   4,   2,   1,  -1,  -3,  -4,  -6,  -7,  -9, -10, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -25, -25, -25, -25, -25, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -18, -18, -17, -18, -17, -17, -17, -16, -16, -16, -15, -14, -14, -14, -15, -15, -15, -15, -15, -15, -14, -14, -13, -11, -10,  -9,  -8, -11, -10,  -6,  -3,  -4,  -5,  -5,  -6,  -5,  -5,  -5,  -5,  -6,  -5,  -5,  -4,  -5,
+  /* -47.0 */  -5,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -14, -14, -15, -15, -15, -16, -16, -17, -17, -17, -16, -16, -16, -16, -16, -15, -15, -14, -14, -14, -13, -13, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,  -0,   0,   1,   1,   2,   3,   4,   5,   6,   7,   8,   9,   9,  10,  13,  18,  20,  20,  17,  16,  14,  13,  12,  12,  12,  11,  12,  11,  11,   9,   7,   6,   4,   2,   0,  -1,  -1,  -2,  -3,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,   0,   2,   3,   4,   6,   7,   9,  11,  12,  14,  15,  16,  17,  19,  20,  21,  23,  23,  25,  26,  26,  27,  28,  27,  27,  27,  27,  27,  25,  25,  24,  24,  24,  23,  23,  23,  22,  22,  22,  22,  23,  24,  25,  26,  25,  26,  26,  26,  27,  27,  28,  29,  30,  31,  31,  32,  32,  33,  33,  33,  33,  33,  34,  34,  35,  37,  40,  41,  43,  45,  45,  45,  44,  46,  43,  45,  44,  43,  43,  44,  45,  46,  46,  45,  45,  46,  48,  48,  45,  44,  43,  42,  41,  40,  39,  38,  37,  36,  35,  34,  34,  36,  38,  37,  36,  36,  35,  33,  32,  31,  30,  29,  28,  26,  25,  24,  23,  22,  20,  19,  18,  16,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -1,  -2,  -4,  -6,  -7,  -9, -10, -12, -13, -15, -16, -17, -19, -20, -21, -21, -22, -23, -24, -25, -25, -25, -25, -25, -26, -26, -26, -25, -25, -25, -25, -24, -24, -23, -23, -22, -21, -20, -20, -19, -18, -17, -17, -18, -17, -17, -17, -16, -16, -15, -13, -12, -13, -14, -14, -14, -14, -13, -13, -13, -12, -12, -11, -11,  -9,  -7,  -7,  -7,  -8,  -4,  -2,   1,   1,  -1,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -5,
+  /* -46.0 */  -2,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -10, -11, -10, -10, -10, -10, -10, -10, -10,  -9, -10, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -16, -16, -16, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -1,  -0,   0,   1,   2,   2,   4,   5,   5,   7,   8,   9,  10,  11,  11,  15,  18,  23,  23,  19,  16,  15,  14,  13,  12,  12,  12,  12,  11,  10,   9,   5,   4,   2,   0,  -0,  -1,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -3,  -4,  -4,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -1,   0,   2,   3,   5,   7,   9,  10,  12,  13,  15,  16,  17,  19,  20,  22,  23,  24,  25,  26,  27,  27,  27,  26,  27,  26,  25,  25,  25,  24,  23,  23,  23,  23,  23,  22,  22,  21,  21,  22,  22,  23,  24,  24,  25,  25,  26,  27,  27,  27,  28,  29,  30,  31,  32,  32,  33,  33,  33,  33,  33,  33,  33,  33,  34,  35,  38,  40,  42,  45,  45,  46,  46,  46,  45,  46,  45,  46,  46,  44,  46,  47,  47,  45,  47,  52,  50,  47,  44,  43,  43,  42,  41,  40,  38,  37,  35,  34,  34,  33,  33,  33,  34,  34,  33,  33,  32,  31,  30,  29,  29,  28,  27,  25,  24,  23,  22,  20,  19,  18,  17,  15,  14,  12,  11,   9,   7,   6,   4,   2,   1,  -1,  -3,  -4,  -6,  -7,  -9, -11, -12, -14, -15, -16, -18, -19, -21, -21, -22, -23, -24, -25, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, -25, -25, -24, -24, -23, -22, -22, -21, -20, -19, -18, -18, -17, -18, -17, -16, -16, -16, -15, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11, -11, -10, -10,  -9,  -8,  -8,  -7,  -5,  -5,  -5,  -2,   4,   4,   5,   6,   3,   1,   1,   1,   1,   1,   0,  -0,  -1,  -2,
+  /* -45.0 */   3,   3,   3,   3,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -8,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -8,  -8,  -8,  -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -1,  -0,   0,   1,   2,   3,   4,   5,   6,   6,   7,   9,  10,  11,  11,  13,  16,  19,  19,  18,  17,  16,  15,  14,  12,  12,  12,  11,  11,  11,   9,   5,   3,   2,   0,   0,  -0,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -3,  -4,  -4,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -0,   1,   3,   5,   7,   9,  10,  12,  13,  15,  17,  18,  19,  21,  22,  23,  24,  25,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  24,  24,  23,  22,  21,  21,  21,  21,  22,  22,  22,  23,  24,  25,  26,  26,  26,  27,  27,  28,  28,  29,  30,  31,  32,  32,  33,  33,  33,  33,  33,  33,  33,  33,  33,  34,  35,  38,  39,  42,  44,  46,  46,  47,  46,  46,  46,  46,  45,  45,  46,  46,  46,  45,  44,  45,  45,  44,  43,  43,  42,  41,  40,  39,  37,  36,  34,  33,  32,  32,  32,  31,  31,  31,  31,  31,  30,  30,  29,  28,  27,  26,  25,  24,  23,  21,  20,  19,  18,  16,  15,  14,  12,  11,   9,   8,   6,   4,   3,   1,  -1,  -3,  -5,  -6,  -8,  -9, -11, -13, -14, -16, -17, -19, -20, -21, -22, -23, -24, -25, -26, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, -26, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -19, -18, -17, -17, -17, -16, -16, -15, -15, -14, -13, -13, -12, -12, -12, -11, -11, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -6,  -4,  -3,  -3,  -3,  -6,  -1,   4,   5,   8,   7,   6,   5,   5,   6,   5,   5,   5,   4,   3,
+  /* -44.0 */  10,  10,   9,  10,   9,   6,   3,   1,  -0,  -2,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -5,  -6,  -4,  -6,  -7,  -7,  -7,  -7,  -7,  -8,  -9,  -9, -10, -10, -11, -11, -12, -12, -12, -13, -14, -14, -14, -15, -15, -15, -15, -14, -15, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -2,  -2,  -1,  -0,   1,   2,   3,   3,   4,   5,   6,   7,   8,   9,  10,  11,  10,  12,  14,  17,  18,  18,  19,  18,  16,  15,  14,  12,  11,  11,  11,  11,  10,   6,   6,   2,   1,   1,  -0,  -1,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -5,  -5,  -6,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -0,   1,   3,   5,   7,   8,  10,  12,  13,  15,  16,  18,  19,  21,  22,  23,  24,  25,  26,  25,  26,  26,  26,  25,  25,  25,  24,  24,  23,  23,  22,  22,  23,  22,  21,  21,  21,  21,  21,  22,  23,  24,  24,  25,  26,  27,  27,  28,  28,  28,  29,  30,  30,  31,  32,  32,  33,  33,  33,  34,  34,  33,  33,  33,  34,  34,  35,  38,  40,  42,  44,  45,  46,  46,  46,  46,  44,  44,  44,  45,  44,  44,  44,  44,  44,  43,  43,  43,  42,  41,  39,  39,  37,  36,  34,  33,  32,  32,  31,  31,  30,  30,  30,  30,  29,  29,  28,  27,  26,  25,  24,  23,  22,  21,  20,  19,  18,  16,  15,  13,  12,  11,   9,   8,   6,   4,   3,   1,  -1,  -3,  -5,  -6,  -8, -10, -12, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -18, -17, -17, -16, -16, -15, -15, -13, -10,  -8,  -9, -11,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -1,  -1,   0,   1,  -0,   2,   5,   8,   9,   9,  11,  10,  11,  12,  11,  11,  10,  10,
+  /* -43.0 */  14,  13,  12,  12,  10,   9,   7,   4,   3,   2,   0,  -1,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -7,  -7,  -8,  -9,  -9, -10, -11, -11, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -0,   1,   2,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  10,  12,  15,  17,  20,  20,  20,  20,  19,  16,  14,  13,  13,  12,  11,  12,  11,   9,   6,   4,   1,   1,   0,  -1,  -2,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -7,  -7,  -6,  -6,  -5,  -3,  -2,  -1,   1,   3,   5,   7,   8,  10,  11,  13,  14,  16,  18,  19,  20,  22,  23,  24,  25,  25,  25,  25,  25,  25,  24,  24,  24,  23,  23,  23,  22,  21,  22,  21,  19,  19,  20,  21,  21,  21,  22,  23,  24,  25,  25,  26,  28,  28,  28,  28,  28,  29,  29,  30,  30,  31,  32,  33,  33,  33,  34,  34,  33,  34,  34,  33,  33,  34,  35,  37,  40,  41,  43,  43,  44,  45,  45,  44,  43,  44,  44,  43,  43,  44,  44,  43,  43,  42,  42,  41,  39,  38,  37,  36,  35,  33,  32,  32,  31,  30,  30,  30,  29,  29,  28,  27,  27,  26,  25,  24,  24,  23,  22,  21,  20,  19,  18,  16,  15,  13,  12,  11,   9,   8,   6,   4,   3,   1,  -1,  -3,  -5,  -7,  -8, -11, -12, -14, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -30, -30, -30, -30, -30, -30, -30, -30, -29, -29, -28, -28, -27, -27, -26, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -16, -15, -15, -14,  -9,  -5,  -4,  -5,  -8,  -9,  -8,  -8,  -7,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -0,   1,   2,   3,   4,   5,   7,   8,   9,  11,  13,  12,  10,  12,  14,  14,  15,  14,  14,
+  /* -42.0 */  15,  15,  14,  13,  11,  10,   9,   7,   5,   4,   3,   2,   1,   0,   0,  -1,   0,  -0,  -2,  -2,  -2,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -7,  -7,  -8,  -9, -10, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -0,   1,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  11,  12,  16,  17,  20,  21,  22,  23,  23,  19,  16,  14,  13,  13,  12,  12,  12,  12,  10,   6,   2,   1,   0,  -1,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   3,   5,   6,   8,  10,  11,  13,  14,  16,  18,  19,  20,  22,  23,  24,  25,  25,  25,  25,  25,  24,  24,  24,  24,  23,  23,  22,  22,  21,  20,  20,  20,  24,  21,  22,  20,  20,  21,  22,  23,  24,  25,  26,  26,  27,  28,  28,  29,  29,  29,  29,  30,  30,  31,  31,  32,  34,  35,  35,  35,  34,  34,  33,  33,  33,  34,  35,  37,  38,  40,  41,  42,  43,  44,  44,  43,  44,  44,  43,  43,  43,  43,  42,  42,  40,  40,  39,  37,  36,  35,  35,  33,  32,  31,  30,  30,  29,  28,  28,  28,  28,  27,  26,  25,  24,  23,  22,  22,  21,  20,  19,  18,  17,  16,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -1,  -3,  -5,  -7,  -9, -11, -13, -14, -16, -18, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -31, -31, -31, -32, -32, -31, -31, -31, -31, -31, -31, -30, -30, -29, -29, -28, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -15, -14, -12,  -6,  -2,  -1,  -2,  -5,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -2,  -1,  -1,  -0,   1,   2,   3,   4,   6,   7,   9,  11,  12,  13,  14,  15,  15,  11,   9,  10,  11,  14,  16,  15,
+  /* -41.0 */  19,  18,  17,  15,  13,  12,  10,   7,   6,   5,   4,   4,   3,   2,   2,   4,   2,   0,   0,  -1,  -1,  -1,  -1,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -8, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -0,  -0,   0,   1,   2,   3,   4,   5,   6,   8,   9,  10,  11,  11,  11,  16,  19,  21,  22,  23,  24,  23,  20,  16,  14,  14,  13,  13,  13,  13,  12,  11,   9,   5,   2,   1,  -0,  -1,  -2,  -3,  -3,  -4,  -5,  -5,  -6,  -7,  -8,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   2,   4,   6,   8,  10,  11,  13,  14,  16,  18,  19,  20,  21,  22,  23,  24,  25,  24,  24,  24,  24,  24,  23,  23,  23,  22,  22,  20,  20,  20,  19,  18,  17,  18,  18,  19,  19,  20,  21,  22,  23,  25,  26,  27,  27,  27,  29,  29,  29,  29,  29,  29,  30,  30,  30,  31,  33,  35,  36,  35,  35,  33,  33,  33,  33,  33,  33,  35,  36,  37,  38,  39,  40,  42,  43,  43,  43,  44,  43,  43,  42,  42,  41,  41,  40,  39,  37,  36,  35,  34,  32,  31,  30,  29,  29,  28,  28,  27,  27,  27,  26,  26,  25,  24,  22,  21,  20,  19,  19,  18,  18,  16,  15,  14,  13,  11,  10,   8,   7,   5,   4,   2,   0,  -2,  -4,  -5,  -7,  -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -27, -28, -29, -30, -31, -32, -32, -33, -33, -33, -33, -33, -33, -33, -32, -32, -32, -32, -31, -30, -30, -29, -28, -28, -27, -26, -25, -23, -22, -21, -20, -18, -17, -16, -16, -15, -14, -12,  -6,  -2,  -1,  -1,  -0,  -3,  -5,  -4,  -3,  -2,  -1,  -1,   0,   1,   1,   2,   3,   4,   5,   6,   7,   8,   9,  13,  14,  15,  16,  16,  18,  16,  13,  13,  17,  16,  15,  17,  19,
+  /* -40.0 */  21,  20,  19,  17,  15,  13,  11,   9,   8,   7,   6,   6,   5,   5,   6,   3,   3,   3,   2,   1,   1,   1,   0,  -0,  -1,  -2,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   1,   2,   3,   4,   6,   7,   8,   9,  11,  11,  10,  13,  17,  22,  23,  23,  23,  21,  19,  16,  15,  14,  13,  13,  14,  14,  13,  13,  12,  10,   5,   2,   0,  -0,  -2,  -3,  -4,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   2,   4,   6,   8,  10,  11,  13,  14,  16,  17,  19,  20,  21,  22,  23,  23,  24,  24,  24,  23,  23,  23,  23,  22,  22,  22,  22,  20,  19,  18,  18,  18,  17,  18,  18,  19,  19,  20,  20,  21,  22,  24,  25,  26,  26,  27,  26,  28,  28,  29,  29,  29,  29,  29,  30,  30,  32,  34,  35,  35,  34,  33,  33,  33,  34,  34,  33,  33,  34,  34,  35,  37,  38,  40,  41,  42,  43,  43,  43,  42,  42,  41,  40,  40,  39,  38,  36,  35,  33,  32,  31,  30,  29,  28,  27,  27,  27,  26,  26,  26,  25,  24,  23,  22,  21,  20,  18,  18,  17,  17,  16,  15,  13,  12,  10,   9,   7,   6,   4,   2,   1,  -1,  -2,  -4,  -6,  -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -34, -34, -34, -34, -34, -34, -34, -33, -33, -32, -32, -31, -30, -30, -29, -28, -27, -26, -25, -24, -23, -21, -20, -18, -17, -15, -15, -14, -12,  -7,  -2,  -2,  -1,  -0,   1,   0,  -2,  -2,  -1,   1,   1,   2,   3,   3,   4,   4,   5,   6,   7,   8,  10,  12,  12,  15,  18,  19,  19,  19,  20,  19,  15,  13,  16,  18,  19,  19,  21,
+  /* -39.0 */  22,  22,  21,  19,  17,  16,  13,  12,  11,  10,   9,   8,  10,   8,   6,   6,   5,   4,   3,   3,   3,   2,   1,   1,   0,  -1,  -2,  -3,  -4,  -6,  -7,  -8,  -8,  -9,  -9,  -9, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   1,   1,   2,   3,   4,   6,   7,   8,   9,  10,  11,   9,  13,  17,  20,  24,  23,  20,  18,  17,  16,  14,  14,  14,  14,  13,  12,  13,  13,  13,  11,   8,   3,   1,  -0,  -2,  -3,  -4,  -4,  -5,  -5,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   6,   8,  10,  11,  13,  14,  16,  17,  18,  19,  20,  21,  22,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  20,  20,  19,  19,  18,  17,  17,  17,  17,  18,  19,  19,  20,  20,  21,  22,  23,  24,  25,  26,  26,  28,  27,  28,  27,  28,  29,  29,  29,  30,  30,  30,  32,  34,  33,  32,  33,  32,  32,  32,  32,  32,  32,  32,  32,  33,  34,  36,  37,  39,  40,  40,  41,  41,  43,  42,  41,  40,  40,  38,  37,  35,  33,  31,  30,  29,  28,  27,  26,  26,  26,  26,  25,  25,  25,  24,  23,  22,  20,  19,  18,  17,  16,  16,  15,  15,  13,  11,   9,   8,   6,   5,   3,   2,   0,  -2,  -3,  -5,  -7,  -9, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -28, -29, -30, -31, -32, -33, -33, -34, -34, -35, -35, -35, -35, -35, -35, -35, -35, -35, -34, -34, -33, -33, -32, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -20, -18, -16, -15, -13, -10,  -6,  -3,  -1,   1,   2,   2,   3,   1,  -1,   0,   2,   3,   4,   5,   5,   6,   7,   7,   7,   8,   9,  11,  13,  16,  16,  18,  21,  22,  22,  22,  22,  24,  23,  25,  25,  20,  21,  20,  22,
+  /* -38.0 */  21,  23,  23,  22,  20,  18,  16,  14,  13,  13,  11,  12,  12,   9,   8,   7,   6,   5,   4,   4,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -8,  -8,  -9, -10, -10, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,   0,   1,   2,   3,   4,   5,   6,   8,   9,  10,  11,   9,  14,  20,  21,  24,  24,  21,  19,  18,  16,  16,  15,  16,  15,  14,  15,  15,  15,  13,  11,   9,   4,   2,   1,  -1,  -2,  -3,  -4,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   6,   8,   9,  11,  13,  14,  15,  16,  18,  19,  20,  20,  21,  22,  22,  22,  22,  22,  21,  21,  21,  21,  20,  20,  19,  19,  17,  16,  16,  16,  17,  17,  18,  19,  19,  20,  21,  22,  23,  23,  23,  24,  25,  26,  26,  27,  27,  27,  27,  27,  28,  29,  29,  29,  29,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  31,  30,  30,  31,  32,  34,  35,  36,  37,  38,  39,  39,  41,  41,  41,  41,  39,  37,  36,  34,  32,  31,  29,  27,  26,  26,  25,  25,  25,  25,  24,  24,  23,  22,  21,  20,  19,  17,  16,  15,  14,  14,  13,  14,  12,   9,   7,   6,   4,   3,   1,  -0,  -2,  -4,  -6,  -8, -10, -11, -13, -15, -17, -19, -21, -22, -24, -26, -27, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -36, -37, -36, -36, -35, -35, -35, -34, -33, -33, -32, -31, -30, -29, -28, -27, -26, -24, -22, -21, -19, -17, -15, -12,  -8,  -4,  -1,   2,   3,   4,   7,   7,   6,   7,   6,   2,   4,   5,   6,   7,   8,   9,   9,   9,  10,  11,  12,  13,  17,  18,  19,  21,  24,  25,  25,  24,  25,  26,  28,  30,  29,  26,  22,  21,  21,
+  /* -37.0 */  20,  21,  23,  23,  22,  20,  18,  17,  15,  15,  14,  13,  12,  11,  10,   8,   7,   6,   6,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -9, -10, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, -13, -12, -12, -12, -12, -12, -11, -11, -10, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,   0,   1,   2,   3,   5,   6,   7,   8,   9,  11,  11,   9,  12,  21,  21,  25,  25,  23,  20,  18,  17,  17,  17,  17,  16,  17,  17,  16,  15,  14,  12,  10,   8,   4,   2,  -0,  -2,  -3,  -4,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -2,  -1,   1,   2,   4,   6,   7,   9,  11,  12,  13,  15,  16,  17,  18,  19,  20,  21,  21,  21,  21,  21,  21,  20,  20,  19,  19,  19,  19,  18,  18,  18,  17,  16,  16,  17,  17,  18,  18,  19,  20,  21,  22,  23,  23,  24,  24,  25,  25,  26,  26,  26,  27,  27,  27,  29,  29,  29,  29,  28,  30,  30,  30,  29,  30,  29,  30,  30,  31,  31,  30,  29,  28,  29,  30,  31,  31,  32,  34,  36,  37,  37,  37,  38,  39,  39,  38,  36,  36,  33,  31,  30,  28,  26,  25,  25,  24,  24,  24,  24,  23,  23,  22,  21,  19,  18,  17,  16,  15,  14,  13,  12,  12,  11,  10,   8,   5,   4,   2,   0,  -1,  -3,  -5,  -7,  -8, -10, -12, -14, -16, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -38, -39, -39, -39, -39, -39, -38, -39, -39, -38, -38, -37, -36, -35, -35, -34, -33, -32, -30, -29, -28, -27, -26, -25, -23, -21, -18, -13,  -9,  -6,  -4,  -1,   2,   4,   5,   7,   9,  12,  14,  14,  12,   6,   7,   8,   9,  10,  12,  11,  12,  12,  13,  14,  16,  17,  19,  21,  22,  24,  25,  26,  27,  27,  28,  29,  32,  33,  33,  30,  23,  21,  20,
+  /* -36.0 */  23,  17,  22,  24,  24,  23,  21,  19,  18,  16,  16,  14,  14,  12,  11,   9,   9,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9,  -9, -10, -10, -10, -10, -11, -11, -12, -11, -11, -11, -11, -11, -12, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -1,  -0,   1,   2,   3,   5,   6,   7,   8,  10,  11,  12,  11,   9,  19,  21,  25,  27,  26,  23,  20,  19,  18,  18,  18,  18,  17,  17,  17,  17,  15,  13,  11,   9,   7,   4,   1,  -1,  -3,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   6,   7,   9,  10,  12,  13,  14,  16,  17,  18,  18,  19,  20,  20,  20,  20,  19,  19,  18,  18,  18,  18,  18,  17,  17,  17,  18,  17,  17,  17,  17,  18,  18,  19,  19,  20,  21,  22,  23,  24,  24,  25,  25,  26,  26,  26,  27,  27,  28,  29,  31,  31,  30,  28,  28,  28,  28,  28,  28,  28,  28,  28,  30,  30,  30,  29,  27,  27,  27,  27,  28,  28,  30,  32,  34,  35,  35,  34,  34,  34,  35,  34,  34,  33,  33,  31,  29,  27,  25,  24,  24,  24,  24,  24,  23,  23,  22,  20,  19,  18,  17,  15,  14,  13,  12,  11,  11,  10,   9,   8,   6,   4,   1,  -0,  -2,  -3,  -5,  -7,  -9, -11, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -31, -33, -33, -36, -37, -38, -39, -39, -40, -40, -40, -41, -41, -40, -39, -38, -38, -38, -38, -39, -38, -37, -36, -36, -35, -34, -33, -31, -30, -29, -28, -26, -24, -21, -18, -11,  -7,  -5,  -3,  -1,   1,   3,   5,   6,   8,  10,  12,  16,  19,  17,  10,   9,  10,  12,  13,  14,  14,  15,  15,  16,  18,  19,  20,  22,  24,  25,  25,  27,  28,  29,  29,  31,  33,  36,  37,  36,  34,  33,  28,  23,
+  /* -35.0 */  28,  18,  20,  25,  26,  25,  23,  21,  20,  19,  17,  16,  14,  13,  12,  10,   9,   8,   6,   5,   5,   3,   2,   1,   0,  -0,  -1,  -2,  -3,  -3,  -4,  -5,  -6,  -6,  -7,  -8,  -8,  -9,  -9,  -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -0,   1,   2,   4,   5,   6,   7,   8,  10,  11,  13,  13,  10,  12,  21,  25,  30,  26,  22,  21,  20,  20,  19,  18,  18,  17,  17,  17,  16,  15,  14,  13,  10,   9,   8,   3,  -0,  -3,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   5,   7,   6,   8,   9,  11,  12,  14,  15,  16,  16,  17,  18,  18,  18,  19,  19,  18,  18,  18,  17,  17,  17,  17,  17,  17,  18,  17,  17,  17,  18,  18,  18,  19,  20,  20,  20,  21,  21,  22,  23,  24,  25,  25,  26,  26,  26,  26,  28,  30,  31,  32,  31,  30,  29,  29,  26,  27,  28,  27,  26,  26,  27,  28,  30,  30,  29,  27,  25,  25,  25,  26,  26,  27,  30,  33,  33,  33,  32,  31,  31,  31,  31,  30,  31,  30,  30,  29,  26,  25,  23,  22,  22,  22,  22,  22,  21,  20,  19,  17,  16,  15,  14,  13,  12,  11,  10,   9,   8,   7,   6,   4,   2,  -1,  -2,  -4,  -6,  -7,  -9, -11, -13, -15, -17, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -34, -37, -38, -40, -40, -40, -40, -40, -39, -38, -39, -40, -38, -35, -33, -32, -32, -34, -35, -35, -34, -33, -33, -33, -33, -33, -32, -31, -28, -25, -22, -19, -15, -11,  -7,  -4,  -2,  -0,   1,   2,   4,   6,   8,  10,  12,  14,  17,  20,  20,  17,  11,  13,  14,  15,  16,  17,  17,  17,  19,  21,  22,  24,  25,  26,  26,  27,  28,  31,  32,  32,  34,  38,  39,  38,  38,  38,  38,  37,  28,
+  /* -34.0 */  37,  24,  18,  25,  27,  27,  26,  23,  21,  20,  17,  16,  16,  14,  12,  11,   9,   8,   7,   6,   5,   4,   3,   2,   1,   0,  -0,  -2,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -12, -12, -12, -12, -11, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,   0,   1,   2,   3,   5,   7,   7,  10,  10,  11,  12,  14,  13,   8,  19,  25,  32,  24,  22,  22,  23,  22,  21,  19,  18,  17,  17,  17,  17,  16,  16,  15,  13,  10,   8,   6,   2,  -1,  -3,  -5,  -6,  -6,  -7,  -7,  -8,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   3,   3,   5,   6,   7,   9,   9,  11,  12,  13,  14,  15,  16,  16,  17,  18,  18,  18,  18,  17,  17,  16,  16,  16,  16,  16,  16,  17,  18,  17,  18,  19,  18,  20,  20,  20,  21,  21,  21,  22,  23,  23,  24,  25,  25,  26,  26,  26,  27,  29,  31,  32,  33,  33,  32,  31,  30,  28,  27,  29,  28,  26,  26,  26,  27,  29,  29,  29,  26,  23,  23,  23,  23,  24,  25,  28,  31,  33,  31,  30,  28,  28,  28,  27,  27,  27,  28,  29,  27,  25,  24,  22,  21,  20,  20,  20,  20,  19,  18,  17,  16,  15,  14,  12,  11,  10,   9,   8,   7,   6,   5,   3,   1,  -1,  -2,  -4,  -6,  -8,  -9, -11, -13, -15, -17, -19, -21, -22, -24, -26, -28, -30, -31, -32, -33, -35, -37, -38, -40, -41, -41, -40, -40, -40, -37, -36, -37, -38, -36, -33, -31, -28, -28, -30, -30, -30, -30, -29, -27, -26, -27, -28, -28, -27, -24, -22, -18, -14, -11,  -8,  -4,  -2,   1,   3,   4,   4,   6,   8,  10,  12,  14,  17,  19,  22,  24,  22,  18,  15,  17,  18,  19,  19,  20,  20,  23,  24,  26,  27,  27,  27,  28,  30,  32,  32,  33,  36,  39,  39,  39,  39,  40,  40,  41,  41,  37,
+  /* -33.0 */  43,  35,  18,  24,  28,  28,  27,  24,  23,  20,  19,  18,  16,  14,  12,  11,  10,   9,   8,   7,   6,   5,   3,   2,   1,   1,  -0,  -1,  -2,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -0,   0,   1,   3,   4,   5,   6,   6,   8,   9,  11,  12,  14,  15,  10,  15,  26,  32,  23,  21,  23,  25,  25,  23,  20,  19,  18,  17,  18,  17,  17,  16,  15,  13,  11,   8,   7,   4,  -0,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -8,  -8,  -7,  -6,  -5,  -3,  -2,  -1,   1,   2,   3,   4,   6,   7,   7,   8,   9,  11,  12,  13,  14,  14,  15,  16,  16,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  16,  17,  17,  19,  19,  19,  20,  20,  23,  21,  22,  22,  22,  23,  23,  24,  24,  25,  26,  27,  27,  27,  28,  31,  31,  33,  34,  34,  32,  31,  29,  28,  29,  29,  30,  29,  25,  25,  25,  26,  27,  29,  26,  22,  20,  21,  21,  22,  23,  26,  31,  30,  28,  26,  25,  25,  24,  24,  23,  23,  24,  25,  25,  24,  22,  21,  19,  19,  18,  18,  17,  17,  16,  15,  14,  13,  12,  11,   9,   8,   7,   6,   5,   4,   3,   1,  -1,  -3,  -5,  -7,  -8, -10, -11, -12, -15, -17, -19, -21, -23, -25, -27, -28, -30, -32, -33, -34, -35, -37, -39, -39, -40, -41, -40, -40, -41, -40, -38, -38, -39, -38, -36, -33, -30, -27, -27, -28, -28, -28, -28, -27, -26, -23, -22, -21, -21, -21, -19, -17, -15, -14, -11,  -7,  -2,   1,   3,   7,   7,   8,   8,   9,  12,  14,  17,  19,  22,  25,  27,  26,  25,  20,  19,  21,  24,  22,  24,  24,  27,  28,  29,  30,  29,  30,  30,  34,  34,  35,  36,  37,  38,  40,  40,  40,  41,  42,  42,  43,  43,
+  /* -32.0 */  44,  41,  23,  20,  28,  30,  29,  25,  24,  21,  20,  19,  17,  15,  13,  12,  11,  10,   8,   7,   6,   4,   3,   2,   1,   1,   0,  -0,  -2,  -2,  -3,  -3,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -10, -10, -10, -11, -11, -12, -12, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -1,  -1,  -0,   0,   1,   2,   3,   4,   5,   6,   7,   9,  10,  12,  13,  15,  16,  12,  15,  29,  32,  26,  21,  24,  25,  27,  25,  22,  20,  18,  17,  17,  17,  16,  15,  14,  13,  11,   8,   6,   5,  -1,  -3,  -4,  -5,  -6,  -8,  -8,  -7,  -8,  -7,  -7,  -6,  -5,  -2,  -1,   0,   1,   2,   3,   4,   6,   6,   7,   8,   9,  10,  11,  12,  13,  13,  14,  15,  15,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  16,  17,  18,  19,  19,  19,  20,  20,  23,  21,  23,  23,  23,  23,  24,  24,  25,  25,  27,  27,  28,  29,  31,  30,  32,  33,  35,  37,  36,  35,  34,  34,  33,  33,  31,  31,  27,  24,  23,  23,  24,  25,  24,  20,  18,  18,  19,  20,  21,  24,  26,  26,  25,  23,  23,  21,  21,  20,  20,  20,  20,  21,  22,  21,  21,  21,  19,  16,  16,  15,  15,  14,  14,  13,  12,  11,  10,   9,   8,   6,   5,   4,   3,   2,   0,  -2,  -4,  -6,  -7,  -9, -11, -13, -14, -15, -16, -19, -21, -23, -25, -26, -28, -30, -29, -31, -32, -34, -35, -36, -37, -40, -40, -41, -40, -41, -41, -40, -39, -39, -39, -38, -36, -35, -31, -27, -27, -26, -25, -26, -26, -24, -24, -22, -20, -19, -20, -19, -18, -15, -12, -12,  -9,  -4,   0,   2,   4,   9,  10,  12,  13,  12,  13,  16,  20,  22,  24,  26,  28,  30,  29,  27,  22,  23,  24,  25,  26,  28,  29,  30,  31,  32,  31,  32,  32,  36,  37,  37,  39,  40,  41,  42,  42,  42,  42,  43,  43,  44,  44,
+  /* -31.0 */  46,  45,  33,  19,  28,  31,  29,  28,  26,  23,  21,  19,  17,  16,  14,  12,  11,  10,   8,   7,   6,   4,   3,   2,   1,   1,  -0,  -1,  -1,  -2,  -2,  -3,  -3,  -5,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -2,  -2,  -1,  -0,  -0,   0,   1,   1,   1,   2,   3,   4,   5,   6,   7,   8,  10,  11,  13,  14,  16,  13,  17,  31,  33,  27,  24,  25,  25,  27,  26,  22,  20,  18,  17,  17,  16,  15,  15,  14,  13,  11,   8,   6,   4,   1,  -3,  -5,  -6,  -8,  -8,  -8,  -8,  -9,  -8,  -7,  -5,  -4,  -1,   1,   3,   3,   2,   3,   4,   5,   5,   6,   6,   7,   8,   9,  10,  11,  12,  12,  13,  14,  14,  15,  16,  16,  15,  15,  15,  15,  15,  15,  16,  17,  18,  18,  19,  20,  21,  21,  22,  24,  23,  23,  23,  24,  24,  25,  26,  26,  27,  28,  29,  29,  31,  31,  32,  33,  35,  35,  35,  35,  35,  34,  35,  36,  36,  32,  30,  25,  22,  22,  22,  22,  22,  17,  16,  16,  16,  16,  18,  20,  22,  22,  22,  21,  19,  18,  17,  17,  17,  17,  18,  18,  18,  18,  19,  18,  18,  15,  14,  13,  13,  13,  12,  11,  10,   9,   8,   7,   6,   4,   3,   2,   1,  -0,  -2,  -4,  -6,  -8, -10, -12, -13, -15, -17, -17, -18, -21, -23, -25, -27, -28, -28, -30, -32, -34, -34, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -39, -38, -37, -36, -31, -30, -26, -25, -25, -24, -24, -23, -24, -21, -20, -20, -19, -20, -18, -16, -13,  -9,  -7,  -6,  -2,   1,   4,   7,  11,  10,  14,  16,  16,  17,  18,  22,  24,  25,  27,  30,  32,  33,  31,  25,  26,  29,  28,  29,  31,  32,  33,  33,  34,  34,  34,  35,  37,  39,  40,  41,  42,  43,  45,  43,  43,  43,  44,  44,  45,  46,
+  /* -30.0 */  48,  46,  40,  26,  25,  31,  31,  30,  27,  25,  23,  21,  19,  16,  15,  14,  12,  10,   9,   7,   6,   4,   3,   2,   1,   1,  -0,  -1,  -2,  -2,  -1,  -2,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -2,  -2,  -1,   0,   0,   1,   1,   1,   2,   2,   3,   4,   5,   5,   7,   8,   9,  10,  12,  13,  15,  16,  14,  15,  33,  37,  32,  27,  25,  24,  24,  26,  23,  21,  19,  18,  17,  15,  14,  13,  11,  10,   9,   6,   4,   3,   3,   1,  -4,  -6,  -7,  -8,  -8,  -9, -10,  -9,  -7,  -6,  -4,  -1,  -0,   0,   1,   1,   3,   3,   4,   4,   5,   5,   6,   7,   8,   9,   9,  10,  11,  12,  13,  13,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  17,  17,  18,  19,  20,  21,  23,  23,  25,  22,  23,  24,  24,  25,  26,  26,  26,  27,  28,  29,  32,  31,  32,  34,  35,  34,  33,  33,  33,  33,  32,  34,  33,  36,  35,  30,  28,  24,  21,  21,  20,  20,  16,  14,  13,  14,  14,  15,  15,  18,  19,  19,  18,  16,  15,  14,  14,  14,  15,  15,  15,  14,  14,  14,  15,  15,  14,  13,  12,  11,  10,  10,   9,   8,   7,   6,   5,   4,   3,   1,   0,  -1,  -3,  -5,  -7,  -9, -11, -13, -15, -16, -18, -19, -20, -21, -23, -25, -27, -30, -31, -31, -32, -33, -35, -36, -37, -38, -38, -38, -39, -39, -39, -40, -39, -40, -40, -40, -39, -37, -36, -33, -29, -27, -24, -24, -22, -23, -22, -22, -21, -20, -18, -18, -17, -18, -17, -14, -10,  -6,  -4,  -1,   0,   3,   6,   8,  12,  13,  15,  18,  19,  21,  22,  24,  26,  28,  28,  32,  34,  36,  35,  30,  29,  29,  30,  32,  33,  33,  35,  36,  36,  36,  36,  37,  39,  42,  43,  44,  45,  45,  46,  45,  45,  45,  45,  45,  46,  48,
+  /* -29.0 */  48,  47,  46,  35,  23,  30,  31,  31,  28,  26,  23,  21,  19,  17,  15,  14,  12,  10,   9,   7,   6,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -2,  -2,  -3,  -4,  -5,  -5,  -5,  -6,  -7,  -7,  -8,  -8, -10, -11, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -0,   0,   1,   1,   2,   2,   2,   3,   3,   4,   5,   6,   7,   8,   9,  11,  12,  14,  15,  17,  16,  14,  31,  38,  35,  31,  28,  26,  26,  24,  24,  22,  20,  19,  17,  16,  14,  11,  10,   9,   8,   7,   6,   4,   2,   1,  -3,  -6,  -8,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -6,  -4,  -3,  -1,   0,   1,   2,   2,   2,   2,   3,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  12,  13,  14,  15,  14,  15,  15,  15,  15,  15,  16,  17,  18,  18,  19,  20,  21,  22,  24,  24,  23,  24,  24,  24,  25,  25,  26,  26,  27,  28,  30,  32,  31,  32,  32,  32,  31,  31,  32,  32,  31,  31,  31,  31,  34,  35,  29,  27,  25,  19,  18,  18,  18,  13,  12,  11,  11,  12,  12,  11,  13,  15,  15,  15,  15,  13,  11,  10,  10,  11,  11,  11,  10,  10,  10,  11,  11,  10,  11,  11,  10,   9,   8,   7,   6,   5,   4,   3,   2,   0,  -1,  -2,  -4,  -6,  -8, -10, -12, -14, -15, -17, -19, -20, -22, -23, -25, -27, -29, -31, -33, -33, -33, -34, -36, -37, -36, -37, -38, -39, -38, -38, -38, -39, -39, -39, -39, -40, -39, -38, -36, -34, -28, -26, -23, -23, -21, -21, -20, -20, -18, -17, -17, -16, -16, -16, -16, -15, -12,  -9,  -4,  -1,   2,   4,   5,   8,  10,  12,  14,  16,  19,  20,  23,  25,  26,  28,  30,  31,  33,  35,  37,  37,  34,  31,  33,  32,  34,  35,  35,  37,  38,  39,  38,  38,  40,  41,  46,  45,  46,  47,  47,  47,  47,  46,  47,  47,  46,  46,  48,
+  /* -28.0 */  48,  49,  48,  41,  25,  30,  35,  32,  30,  27,  24,  22,  19,  17,  15,  13,  12,  10,   9,   7,   6,   5,   4,   2,   1,   0,  -0,  -1,  -1,  -1,  -2,  -3,  -4,  -4,  -5,  -5,  -4,  -5,  -6,  -8,  -9, -11, -11, -12, -13, -13, -13, -14, -14, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   2,   2,   3,   3,   3,   4,   4,   5,   6,   7,   8,   9,  11,  12,  14,  15,  17,  17,  13,  26,  35,  38,  35,  29,  29,  27,  24,  24,  23,  21,  20,  18,  16,  14,  11,   9,   8,   8,   7,   6,   6,   2,   1,  -2,  -6,  -8, -10, -10, -11, -11, -11, -10,  -9,  -7,  -6,  -4,  -3,  -2,  -1,  -0,  -0,   1,   1,   2,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  12,  13,  14,  14,  14,  14,  15,  15,  15,  16,  17,  17,  18,  19,  20,  21,  22,  23,  25,  24,  24,  25,  25,  25,  25,  26,  26,  27,  28,  30,  32,  32,  32,  32,  32,  30,  31,  31,  33,  31,  30,  30,  30,  32,  32,  28,  26,  24,  19,  18,  17,  15,  12,  10,   8,   9,  10,  10,   9,   8,  12,  12,  12,  12,  11,   8,   7,   7,   7,   8,   8,   8,   7,   7,   7,   7,   8,   9,   8,   8,   7,   7,   6,   4,   3,   2,   1,  -0,  -2,  -3,  -5,  -7,  -9, -11, -13, -15, -17, -19, -20, -22, -23, -24, -26, -28, -30, -31, -34, -35, -35, -36, -37, -38, -38, -37, -38, -39, -39, -38, -38, -38, -39, -39, -39, -39, -39, -38, -37, -34, -29, -24, -21, -20, -20, -20, -19, -18, -16, -15, -14, -14, -14, -13, -12, -12, -12, -10,  -9,  -6,   0,   4,   5,   8,   9,  11,  13,  15,  18,  20,  22,  25,  27,  29,  30,  32,  33,  35,  38,  40,  40,  38,  35,  36,  35,  36,  36,  38,  39,  41,  41,  41,  40,  42,  44,  46,  47,  47,  48,  48,  49,  49,  48,  48,  47,  47,  47,  48,
+  /* -27.0 */  48,  50,  49,  45,  29,  31,  34,  33,  31,  28,  25,  22,  19,  17,  15,  13,  12,  10,   9,   7,   7,   5,   4,   2,   2,   0,  -0,  -1,  -1,  -1,  -2,  -3,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -9, -10, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -11, -11, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   6,   7,   8,   9,  10,  12,  13,  14,  16,  18,  19,  13,  23,  35,  41,  41,  37,  36,  26,  25,  24,  24,  22,  21,  19,  17,  15,  11,   8,   6,   5,   7,   6,   4,   1,   0,  -3,  -7,  -8, -11, -10, -10, -11, -12,  -9,  -9,  -8,  -7,  -5,  -4,  -3,  -3,  -2,  -2,  -1,  -1,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  14,  14,  14,  15,  15,  15,  16,  17,  17,  18,  19,  20,  21,  22,  22,  24,  26,  25,  25,  25,  25,  25,  25,  25,  26,  28,  31,  32,  33,  33,  31,  32,  30,  29,  28,  29,  28,  29,  29,  29,  29,  29,  28,  24,  22,  18,  15,  14,  13,  11,   7,   6,   6,   7,   7,   7,   6,   9,  10,   9,   8,   6,   5,   4,   4,   4,   4,   5,   5,   5,   4,   4,   4,   4,   5,   6,   6,   6,   5,   3,   3,   1,   0,  -1,  -2,  -4,  -6,  -8, -10, -12, -14, -16, -18, -19, -21, -23, -24, -26, -27, -27, -29, -32, -34, -36, -37, -38, -39, -39, -40, -40, -40, -40, -40, -39, -39, -38, -38, -38, -38, -38, -38, -38, -37, -34, -30, -26, -23, -20, -18, -18, -18, -17, -15, -14, -13, -12, -11, -10, -10,  -8,  -7,  -5,  -2,   0,   0,   1,   4,   7,   9,  12,  14,  16,  18,  20,  22,  24,  26,  29,  32,  34,  35,  36,  38,  41,  43,  43,  39,  37,  37,  37,  38,  41,  41,  42,  43,  44,  44,  43,  45,  46,  48,  49,  50,  50,  50,  50,  50,  50,  49,  48,  48,  47,  48,
+  /* -26.0 */  49,  51,  50,  47,  34,  32,  34,  34,  31,  28,  25,  22,  20,  17,  15,  14,  12,  10,   9,   8,   7,   6,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -2,  -3,  -4,  -3,  -5,  -6,  -7,  -8,  -9, -10, -11, -11, -12, -12, -13, -13, -13, -13, -13, -13, -13, -12, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -0,  -0,   0,   1,   1,   1,   1,   2,   2,   4,   4,   4,   5,   6,   6,   8,   9,   9,  11,  13,  15,  16,  17,  18,  16,  20,  34,  41,  43,  41,  36,  29,  27,  25,  25,  23,  21,  19,  17,  14,  11,   7,   5,   4,   5,   5,   4,   2,  -0,  -2,  -6, -10, -11, -11, -10, -11, -11, -11, -10,  -9,  -7,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  13,  14,  14,  14,  14,  15,  16,  16,  17,  18,  19,  19,  20,  21,  22,  23,  25,  27,  29,  24,  25,  25,  25,  25,  26,  28,  31,  32,  34,  34,  30,  28,  29,  28,  27,  27,  26,  26,  26,  26,  26,  27,  26,  20,  19,  16,  13,  12,  10,  10,   6,   5,   4,   5,   5,   4,   5,   8,   9,   7,   5,   3,   2,   2,   2,   2,   2,   3,   3,   3,   2,   2,   2,   2,   2,   3,   2,   2,   1,   1,   0,  -1,  -2,  -4,  -5,  -7,  -9, -11, -13, -15, -17, -19, -20, -22, -24, -25, -27, -29, -30, -29, -31, -34, -36, -38, -39, -40, -40, -41, -42, -42, -42, -41, -39, -40, -40, -39, -38, -37, -37, -37, -38, -37, -35, -31, -27, -24, -22, -19, -17, -17, -17, -14, -12, -11, -11, -10,  -8,  -7,  -6,  -2,   0,   3,   4,   1,   2,   4,   8,  10,  12,  14,  17,  19,  21,  23,  24,  26,  28,  31,  35,  38,  39,  40,  42,  45,  45,  45,  42,  40,  40,  40,  41,  41,  43,  45,  46,  47,  46,  46,  47,  49,  50,  51,  51,  51,  52,  52,  51,  51,  50,  49,  49,  49,  49,
+  /* -25.0 */  50,  51,  51,  50,  39,  28,  34,  34,  31,  28,  25,  22,  19,  17,  15,  14,  12,  10,  10,   9,   8,   7,   5,   4,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -4,  -5,  -5,  -7,  -8,  -9,  -9, -10, -11, -11, -12, -12, -12, -13, -13, -13, -13, -12, -11, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,  -0,   0,   1,   1,   1,   2,   2,   3,   3,   3,   4,   5,   5,   8,   8,   8,  10,  11,  12,  14,  17,  18,  19,  16,  18,  36,  38,  41,  43,  39,  29,  27,  26,  25,  23,  21,  19,  17,  13,  10,   6,   4,   3,   2,   3,   4,   2,  -1,  -2,  -3,  -6, -10, -12, -11, -12, -11, -11,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4,   5,   7,   8,   9,  10,  12,  12,  13,  13,  13,  14,  14,  14,  15,  16,  16,  17,  18,  19,  20,  21,  22,  23,  24,  26,  28,  26,  24,  24,  24,  24,  25,  28,  30,  32,  33,  33,  29,  28,  28,  27,  26,  24,  24,  24,  22,  21,  21,  19,  21,  15,  15,  12,  11,  11,   8,   7,   6,   4,   3,   3,   3,   2,   5,   8,   9,   7,   3,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,  -0,  -0,  -1,  -2,  -3,  -4,  -5,  -6,  -8, -10, -12, -14, -16, -18, -20, -22, -24, -25, -27, -28, -30, -32, -33, -32, -33, -36, -38, -39, -41, -41, -42, -43, -43, -43, -43, -43, -42, -41, -40, -39, -38, -38, -37, -37, -35, -34, -34, -30, -25, -22, -21, -18, -16, -16, -15, -12,  -9,  -7,  -6,  -7,  -6,  -4,  -3,  -3,   0,   2,   3,   3,   5,   7,  10,  13,  16,  19,  21,  24,  26,  27,  28,  29,  32,  34,  38,  41,  44,  46,  46,  47,  47,  47,  43,  43,  41,  43,  44,  44,  48,  47,  48,  49,  48,  48,  49,  51,  53,  54,  53,  52,  53,  53,  52,  52,  51,  50,  49,  49,  50,
+  /* -24.0 */  50,  52,  52,  51,  45,  24,  32,  33,  31,  28,  25,  22,  20,  17,  15,  14,  12,  11,  11,  10,   8,   7,   6,   4,   3,   2,   1,   0,  -1,  -2,  -4,  -4,  -4,  -5,  -6,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -12, -12, -13, -12, -12, -12, -12, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   6,   6,   8,   8,   9,  11,  12,  14,  16,  18,  19,  17,  17,  32,  34,  40,  43,  43,  31,  27,  24,  24,  23,  20,  18,  16,  13,   9,   5,   2,   1,  -1,  -0,  -0,  -1,  -3,  -2,  -3,  -4,  -6,  -8,  -9, -10, -12, -11, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   2,   3,   4,   5,   7,   8,   9,  11,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  16,  17,  18,  19,  20,  21,  22,  24,  26,  27,  25,  23,  23,  23,  23,  25,  28,  29,  31,  33,  32,  29,  27,  26,  26,  24,  23,  22,  21,  19,  17,  19,  18,  15,  11,  12,   9,   8,   9,   6,   4,   4,   3,   2,   2,   1,  -0,   5,   7,   8,   6,   2,  -1,  -2,  -2,  -1,  -1,  -1,  -1,  -0,  -1,  -2,  -2,  -2,  -1,  -1,  -2,  -2,  -3,  -3,  -4,  -5,  -6,  -8,  -9, -11, -13, -15, -17, -19, -22, -23, -25, -27, -29, -30, -31, -33, -34, -35, -35, -36, -38, -41, -42, -43, -43, -43, -44, -44, -44, -45, -44, -43, -42, -41, -40, -39, -37, -37, -35, -32, -32, -33, -30, -25, -21, -19, -16, -13, -11, -10,  -8,  -5,  -4,  -4,  -4,  -3,  -1,   0,   2,   3,   4,   3,   5,   7,  10,  13,  17,  22,  24,  26,  28,  31,  32,  32,  33,  35,  38,  42,  46,  47,  48,  49,  49,  49,  48,  45,  44,  46,  47,  46,  47,  48,  49,  51,  50,  50,  50,  51,  54,  55,  55,  54,  53,  53,  54,  54,  53,  52,  51,  50,  50,  50,
+  /* -23.0 */  50,  52,  52,  52,  51,  29,  28,  31,  30,  28,  25,  23,  20,  18,  16,  14,  13,  12,  11,  10,   9,   8,   6,   5,   3,   3,   2,   1,  -1,  -1,  -3,  -4,  -5,  -7,  -7,  -8,  -8,  -9,  -9, -10, -10, -11, -11, -11, -12, -11, -12, -12, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -8,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   1,   1,   2,   2,   3,   4,   4,   6,   7,   7,   8,   9,  10,  12,  14,  16,  18,  20,  18,  15,  33,  36,  40,  44,  43,  37,  25,  24,  23,  21,  19,  18,  16,  13,   9,   5,  -0,  -2,  -3,  -4,  -5,  -5,  -5,  -4,  -2,  -3,  -4,  -6,  -6,  -6, -11, -11, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   3,   4,   5,   7,   8,  10,  11,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  17,  17,  18,  19,  20,  22,  23,  25,  26,  25,  24,  22,  22,  23,  24,  28,  29,  30,  32,  32,  30,  27,  25,  23,  22,  21,  19,  18,  17,  16,  15,  15,  14,  12,  10,   6,   6,   6,   3,   1,   0,   1,  -0,  -0,  -1,  -1,   3,   4,   6,   3,   1,  -3,  -4,  -5,  -4,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -8,  -9, -11, -13, -14, -17, -18, -21, -23, -25, -27, -28, -30, -32, -33, -35, -36, -37, -38, -38, -38, -41, -43, -43, -44, -45, -45, -45, -45, -46, -46, -45, -44, -43, -41, -39, -37, -37, -36, -34, -32, -31, -32, -31, -27, -21, -16, -13, -10,  -9,  -7,  -5,  -5,  -2,  -0,   1,   2,   3,   4,   6,   8,   9,  11,  13,  15,  19,  22,  24,  26,  28,  30,  33,  36,  37,  37,  37,  39,  42,  46,  49,  50,  50,  51,  51,  51,  50,  50,  48,  48,  49,  48,  50,  51,  52,  52,  52,  52,  52,  53,  57,  58,  57,  52,  49,  50,  50,  52,  53,  54,  52,  51,  50,  50,
+  /* -22.0 */  50,  52,  52,  53,  52,  44,  26,  30,  30,  28,  26,  23,  21,  18,  15,  14,  13,  12,  11,  11,  10,   9,   8,   5,   4,   4,   2,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -6,  -7,  -8,  -9,  -9,  -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -8,  -7,  -7,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   1,   1,   2,   2,   3,   4,   6,   6,   7,   8,   9,  10,  11,  13,  16,  17,  19,  20,  15,  33,  37,  43,  44,  42,  39,  27,  23,  21,  21,  20,  18,  16,  14,   9,   4,  -1,  -3,  -4,  -6,  -6,  -7,  -6,  -5,  -3,  -3,  -4,  -5,  -5,  -6,  -8, -10, -10, -10, -10,  -9,  -8,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -3,  -2,  -1,   1,   2,   3,   4,   6,   8,   9,  10,  11,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  17,  17,  18,  19,  21,  22,  23,  24,  25,  24,  23,  22,  23,  24,  27,  28,  29,  30,  31,  29,  27,  25,  21,  19,  19,  18,  16,  16,  14,  13,  11,  10,  10,   8,   4,   3,   2,  -1,  -2,  -3,  -2,  -2,  -3,  -3,  -2,   0,   0,   4,   3,  -0,  -5,  -7,  -7,  -7,  -6,  -5,  -4,  -4,  -6,  -6,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -9, -10, -12, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -44, -45, -45, -46, -46, -46, -46, -46, -47, -47, -47, -45, -44, -42, -40, -35, -34, -36, -33, -31, -31, -31, -29, -27, -22, -15, -12,  -9,  -7,  -7,  -6,  -2,   0,   3,   5,   5,   5,   7,  10,  13,  14,  15,  16,  19,  21,  25,  27,  30,  31,  34,  37,  40,  41,  41,  42,  43,  46,  49,  51,  52,  54,  53,  53,  54,  53,  52,  51,  51,  52,  51,  54,  52,  54,  54,  54,  53,  53,  59,  60,  58,  54,  51,  60,  61,  60,  58,  57,  54,  53,  51,  50,  50,
+  /* -21.0 */  50,  52,  52,  53,  53,  52,  35,  27,  30,  28,  26,  23,  20,  18,  16,  14,  14,  12,  12,  11,  11,   9,   7,   6,   5,   4,   2,   1,   0,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -12, -12, -11, -11, -10, -10,  -9,  -8,  -7,  -6,  -6,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,   0,   0,   1,   1,   2,   3,   4,   6,   8,   8,   9,  10,  12,  14,  16,  18,  20,  20,  16,  32,  38,  43,  42,  43,  40,  29,  22,  23,  21,  21,  18,  16,  14,   9,   4,  -1,  -4,  -6,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -4,  -5,  -6,  -6,  -8, -11,  -9, -10,  -8,  -6,  -5,  -6,  -5,  -6,  -6,  -6,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -0,   1,   3,   4,   6,   7,   8,  10,  12,  12,  12,  13,  13,  13,  13,  14,  14,  15,  16,  16,  17,  17,  18,  19,  20,  22,  22,  23,  23,  23,  22,  23,  25,  26,  25,  27,  29,  28,  29,  28,  24,  21,  18,  18,  16,  15,  14,  13,  12,  10,   8,   5,   4,   3,   0,  -2,  -4,  -5,  -5,  -6,  -7,  -6,  -6,  -5,  -4,  -3,   0,   3,  -1,  -6,  -9,  -9,  -9,  -9,  -8,  -1,  -2, -10,  -9,  -8,  -7,  -8,  -8,  -9,  -9, -10, -11, -12, -13, -15, -17, -19, -22, -23, -26, -28, -30, -32, -34, -35, -37, -39, -40, -41, -42, -42, -43, -43, -43, -46, -46, -46, -47, -48, -47, -47, -47, -47, -48, -47, -46, -44, -42, -39, -37, -35, -35, -33, -31, -30, -28, -27, -24, -22, -18, -12,  -9,  -8,  -6,  -3,   1,   4,   6,   7,   8,   9,  11,  14,  16,  17,  20,  22,  24,  26,  28,  31,  32,  34,  36,  40,  44,  44,  43,  44,  47,  50,  53,  54,  55,  55,  56,  55,  56,  56,  53,  52,  54,  54,  54,  57,  54,  57,  57,  54,  54,  62,  60,  60,  57,  50,  62,  64,  64,  63,  62,  60,  59,  54,  53,  51,  50,
+  /* -20.0 */  50,  51,  51,  51,  52,  52,  43,  24,  29,  29,  26,  23,  21,  18,  16,  15,  13,  12,  11,  10,   9,   9,  10,   7,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -6,  -6,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -12, -12, -12, -11, -11, -11, -10, -10,  -9,  -8,  -8,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   0,   1,   1,   2,   3,   5,   7,   8,   9,  11,  13,  15,  16,  18,  20,  19,  16,  34,  42,  43,  43,  44,  42,  30,  23,  24,  22,  20,  18,  16,  14,   9,   4,  -1,  -5,  -7,  -8,  -8,  -8,  -9,  -8,  -8,  -7,  -6, -10,  -6,  -6,  -7, -10,  -7,  -9,  -7,  -8,  -7,  -6,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -6,  -6,  -5,  -3,  -2,  -1,   1,   3,   4,   6,   7,   8,  10,  12,  12,  12,  12,  13,  13,  13,  13,  14,  15,  15,  16,  16,  17,  17,  18,  18,  19,  20,  21,  21,  23,  23,  24,  25,  25,  25,  26,  26,  26,  25,  23,  22,  19,  16,  15,  14,  13,  11,  11,  10,  10,   7,   5,   1,   1,  -1,  -4,  -4,  -9, -11,  -9, -10, -10,  -9,  -8,  -7,  -6,  -2,   1,  -1,  -7, -11, -11, -11, -11, -11, -11, -12, -12,  -7, -12, -10, -11, -11, -11, -12, -12, -13, -15, -16, -18, -21, -23, -25, -27, -29, -32, -33, -35, -37, -39, -40, -42, -44, -45, -46, -47, -46, -45, -45, -48, -48, -48, -48, -48, -49, -48, -48, -48, -48, -47, -46, -44, -42, -40, -37, -35, -34, -32, -30, -28, -26, -24, -22, -19, -17, -12,  -7,  -6,  -3,   1,   4,   8,   9,  10,  11,  14,  16,  18,  21,  23,  24,  24,  25,  28,  31,  33,  34,  37,  39,  43,  46,  45,  45,  48,  52,  55,  56,  57,  57,  57,  57,  57,  58,  56,  54,  55,  55,  55,  56,  58,  57,  58,  56,  56,  60,  59,  61,  58,  51,  55,  64,  65,  65,  64,  63,  61,  59,  57,  52,  51,  50,
+  /* -19.0 */  51,  50,  51,  51,  51,  50,  47,  26,  29,  29,  29,  25,  21,  18,  16,  14,  12,  12,  11,  10,  10,   9,   8,   6,   5,   4,   3,   2,   2,   2,   1,  -0,  -2,  -3,  -5,  -6,  -6,  -7,  -8,  -8,  -9,  -9, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -0,   1,   2,   3,   4,   6,   8,  10,  12,  13,  15,  17,  19,  21,  14,  20,  35,  44,  43,  44,  43,  39,  30,  22,  23,  22,  19,  17,  16,  12,   8,   4,  -2,  -5,  -7,  -8,  -8, -11, -11,  -9,  -9, -10, -10, -11, -11,  -9,  -8,  -7,  -8, -11,  -9,  -8,  -7,  -6,  -5,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -6,  -5,  -3,  -2,  -0,   1,   3,   5,   6,   7,   8,  10,  11,  11,  12,  12,  12,  12,  13,  13,  13,  14,  15,  16,  16,  16,  16,  17,  17,  18,  19,  19,  19,  19,  20,  22,  24,  24,  26,  25,  23,  22,  22,  21,  20,  17,  14,  13,  12,  11,  10,   8,   6,   6,   6,   6,   2,  -2,  -5,  -6,  -7,  -7, -11, -12, -13, -12, -11, -10, -10,  -8,  -3,  -1,  -2,  -7, -13, -13, -14, -13, -13, -14, -15, -12, -10, -13, -13, -14, -15, -16, -15, -16, -17, -18, -20, -22, -25, -27, -29, -31, -34, -36, -37, -39, -41, -42, -44, -45, -47, -49, -49, -50, -51, -48, -47, -51, -51, -51, -50, -49, -50, -49, -49, -48, -47, -46, -45, -44, -42, -40, -37, -35, -33, -31, -29, -27, -24, -22, -20, -17, -15, -14,  -7,  -4,  -0,   4,   8,  10,  11,  13,  16,  18,  20,  22,  24,  27,  29,  28,  29,  31,  34,  36,  37,  40,  42,  45,  47,  48,  49,  52,  56,  58,  59,  58,  58,  58,  58,  58,  59,  57,  57,  57,  58,  57,  56,  58,  58,  57,  57,  59,  59,  61,  60,  58,  53,  64,  66,  66,  65,  64,  63,  61,  59,  57,  55,  51,  51,
+  /* -18.0 */  50,  51,  50,  49,  49,  48,  47,  33,  26,  29,  27,  25,  21,  18,  16,  14,  13,  13,  11,  10,   9,   8,   7,   7,   6,   4,   5,   3,   3,   3,   3,   3,  -0,  -3,  -4,  -4,  -6,  -7,  -6,  -7,  -8,  -9,  -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -2,  -2,  -1,  -0,   1,   2,   4,   5,   8,  10,  12,  14,  16,  17,  17,  13,  18,  27,  38,  44,  44,  45,  41,  38,  30,  22,  22,  22,  21,  16,  13,  10,   6,   2,  -1,  -3,  -6,  -8,  -9, -13, -13, -11, -12, -12, -11, -11, -10, -10,  -9,  -8,  -6, -11,  -7,  -9,  -8,  -7,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -6,  -5,  -3,  -1,  -0,   2,   3,   5,   6,   7,   8,  10,  10,  11,  12,  12,  13,  13,  13,  13,  13,  14,  15,  15,  16,  16,  16,  16,  16,  16,  17,  18,  17,  17,  18,  20,  22,  25,  26,  24,  21,  20,  19,  18,  17,  14,  12,  11,  10,   9,   8,   4,   3,   2,   3,   4,   2,  -4,  -8, -10, -10,  -9, -11, -13, -14, -15, -14, -14, -11, -10,  -7,  -5,  -5,  -7, -13, -15, -16, -16, -16, -16, -16, -17, -17, -16, -16, -16, -17, -18, -19, -20, -21, -22, -24, -26, -29, -31, -33, -36, -38, -40, -41, -42, -44, -45, -47, -49, -50, -52, -53, -52, -54, -52, -48, -53, -53, -52, -52, -51, -50, -51, -49, -48, -47, -45, -44, -43, -41, -39, -36, -34, -32, -30, -27, -25, -22, -19, -17, -14, -12, -10,  -7,  -5,   0,   6,   8,  12,  14,  17,  20,  22,  24,  27,  28,  29,  32,  32,  33,  35,  37,  39,  41,  44,  45,  48,  50,  50,  51,  54,  57,  60,  60,  59,  58,  59,  60,  60,  60,  59,  59,  60,  60,  59,  57,  59,  58,  58,  59,  61,  60,  60,  60,  57,  58,  65,  67,  66,  65,  64,  63,  61,  59,  57,  56,  53,  50,
+  /* -17.0 */  51,  50,  49,  48,  47,  46,  45,  36,  24,  28,  27,  24,  20,  17,  16,  14,  12,  12,  11,  10,   9,   8,   7,   7,   6,   6,   5,   4,   5,   5,   3,   1,  -1,  -3,  -2,  -3,  -3,  -4,  -6,  -7,  -7,  -8,  -9, -10, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -1,  -0,   1,   3,   5,   7,  10,  13,  15,  16,  14,  12,  19,  30,  39,  45,  45,  44,  43,  36,  25,  21,  23,  22,  22,  19,  14,  10,   7,   4,   1,  -1,  -3,  -4,  -7,  -9, -12, -12, -13, -15, -15, -12, -12, -11, -10,  -9,  -8, -12, -10, -10,  -9,  -8,  -8,  -7,  -7,  -6,  -7,  -7,  -8,  -8,  -7,  -6,  -4,  -2,  -1,   0,   2,   4,   5,   6,   7,   9,   9,  10,  11,  11,  12,  12,  13,  13,  13,  13,  13,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  17,  18,  21,  22,  23,  24,  22,  21,  19,  18,  17,  15,  13,  11,  10,   9,   7,   7,   7,  -0,  -1,   1,   1,  -3,  -9, -11, -11, -11, -12, -13, -13, -15, -18, -17, -16, -14, -12, -13, -11,  -8,  -9, -13, -17, -17, -18, -18, -17, -17, -19, -19, -17, -17, -20, -21, -22, -23, -24, -24, -26, -28, -30, -33, -35, -38, -40, -42, -44, -45, -46, -47, -49, -50, -52, -54, -55, -56, -57, -56, -54, -51, -55, -54, -54, -53, -52, -49, -51, -49, -48, -46, -44, -42, -42, -40, -37, -35, -33, -31, -28, -25, -22, -20, -17, -14, -10,  -9,  -6,  -6,  -4,  -0,   7,  12,  16,  19,  22,  24,  26,  29,  31,  33,  31,  33,  35,  36,  38,  39,  43,  45,  45,  48,  50,  52,  52,  54,  57,  59,  61,  62,  59,  60,  61,  63,  63,  63,  61,  61,  61,  61,  60,  60,  60,  59,  58,  60,  59,  60,  60,  60,  58,  62,  66,  66,  66,  65,  63,  62,  61,  59,  58,  55,  54,  51,
+  /* -16.0 */  52,  49,  48,  46,  45,  44,  42,  34,  22,  28,  26,  23,  20,  17,  16,  14,  12,  12,  11,  10,   9,   8,   7,   7,   7,   6,   6,   5,   5,   4,   2,   1,  -1,   1,  -0,  -2,  -4,  -5,  -5,  -5,  -6,  -8,  -9, -10, -10, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -4,  -3,  -3,  -2,  -1,   0,   2,   5,   7,  10,  13,  15,  13,  15,  30,  38,  42,  45,  45,  46,  41,  32,  25,  22,  22,  24,  22,  21,  17,  13,   9,   5,   2,  -0,  -2,  -4,  -5,  -6,  -8, -11, -13, -13, -14, -14, -13, -12, -11,  -9,  -9,  -8,  -9, -14, -11,  -9,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -4,  -3,  -2,  -0,   2,   3,   5,   6,   7,   8,   9,  10,  10,  11,  11,  12,  13,  14,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  16,  20,  23,  24,  24,  22,  20,  18,  17,  16,  14,  12,  10,   8,   7,   7,   5,   3,   2,  -3,  -5,  -9,  -8, -10, -12, -11, -10, -14, -15, -16, -15, -22, -20, -21, -19, -18, -18, -17, -13, -10, -14, -18, -19, -20, -20, -19, -20, -21, -22, -20, -19, -21, -25, -26, -27, -27, -28, -29, -32, -34, -37, -40, -42, -45, -46, -48, -50, -50, -51, -52, -54, -55, -57, -58, -59, -59, -58, -57, -54, -57, -56, -56, -54, -53, -52, -50, -49, -46, -45, -43, -40, -40, -37, -35, -33, -31, -28, -25, -22, -19, -18, -15, -11,  -9,  -8,  -6,  -3,  -1,   2,   8,  14,  20,  22,  25,  27,  29,  33,  34,  35,  34,  35,  37,  39,  41,  43,  45,  47,  49,  50,  51,  52,  54,  56,  59,  62,  63,  62,  61,  63,  63,  64,  64,  63,  61,  61,  61,  62,  63,  62,  62,  61,  61,  60,  60,  59,  61,  60,  62,  64,  66,  66,  65,  64,  62,  61,  59,  58,  56,  54,  53,  52,
+  /* -15.0 */  49,  48,  46,  45,  44,  42,  38,  27,  27,  29,  26,  23,  20,  17,  15,  14,  13,  12,  11,  10,   9,   8,   7,   7,   6,   6,   6,   5,   3,   2,   1,   1,   2,   0,  -2,  -3,  -4,  -5,  -5,  -6,  -7,  -8,  -9, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -2,  -0,   2,   4,   7,  10,  12,  11,  15,  30,  38,  44,  46,  47,  47,  45,  33,  27,  27,  26,  25,  22,  20,  19,  16,  13,   8,   3,  -0,  -2,  -4,  -5,  -6,  -7,  -9, -12, -14, -15, -14, -13, -13, -13, -11, -10, -11,  -8, -13, -14, -12, -11,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -0,   1,   3,   5,   6,   7,   9,  10,  10,  10,  11,  12,  12,  12,  13,  13,  13,  13,  14,  13,  13,  13,  13,  13,  14,  14,  14,  14,  15,  15,  16,  18,  21,  22,  24,  22,  20,  18,  16,  15,  13,  11,   9,   7,   5,   4,   3,   2,  -0,  -3,  -8,  -9, -10, -11, -10, -12, -14, -16, -18, -19, -20, -23, -21, -23, -24, -26, -23, -20, -18, -14, -15, -19, -22, -22, -23, -22, -22, -23, -24, -27, -24, -24, -28, -29, -30, -31, -32, -33, -36, -38, -41, -43, -46, -49, -51, -52, -53, -54, -55, -56, -57, -58, -59, -60, -61, -61, -58, -56, -56, -59, -58, -57, -55, -54, -53, -49, -48, -44, -43, -41, -40, -37, -34, -32, -31, -28, -25, -22, -18, -15, -14, -12,  -8,  -5,  -3,  -1,   1,   4,   6,  10,  15,  21,  26,  28,  30,  32,  35,  37,  37,  37,  39,  41,  43,  45,  47,  48,  51,  53,  52,  52,  54,  56,  58,  61,  64,  65,  63,  63,  64,  64,  63,  62,  61,  62,  62,  63,  63,  63,  64,  63,  64,  62,  61,  62,  63,  59,  54,  62,  64,  65,  65,  64,  63,  61,  59,  58,  56,  55,  53,  51,  49,
+  /* -14.0 */  47,  46,  44,  43,  38,  36,  32,  31,  33,  30,  29,  24,  19,  17,  16,  14,  13,  13,  12,  10,   9,   8,   7,   7,   6,   6,   5,   4,   3,   2,   3,   1,  -1,  -2,  -3,  -3,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -9,  -9,  -9, -10, -10, -10,  -9, -10,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   1,   4,   6,   9,   9,  12,  24,  38,  37,  40,  45,  49,  44,  34,  31,  29,  29,  28,  25,  21,  19,  18,  15,  12,  10,   4,  -2,  -4,  -6,  -8,  -9, -10, -10, -11, -15, -17, -14, -13, -13, -13, -14, -12, -10,  -9, -12, -13, -12, -11, -10,  -9,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   4,   5,   6,   8,   9,   9,  10,  10,  11,  11,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  13,  13,  13,  13,  14,  15,  15,  16,  17,  19,  21,  22,  22,  21,  18,  16,  14,  12,   9,   6,   5,   4,   3,   1,  -0,  -2,  -5,  -7, -11, -11, -12, -11, -16, -17, -19, -20, -20, -22, -24, -23, -25, -26, -27, -25, -24, -18, -16, -16, -22, -24, -24, -25, -25, -25, -26, -27, -29, -29, -27, -31, -32, -34, -35, -36, -37, -40, -42, -45, -47, -50, -53, -55, -56, -58, -59, -60, -60, -61, -62, -62, -62, -64, -64, -63, -61, -60, -60, -59, -59, -56, -55, -53, -50, -46, -42, -41, -40, -38, -35, -30, -28, -27, -25, -21, -17, -14,  -9, -10,  -8,  -4,  -1,   1,   3,   6,   8,  10,  14,  19,  22,  27,  29,  32,  34,  36,  38,  39,  42,  42,  45,  48,  50,  51,  52,  54,  55,  55,  55,  57,  59,  62,  64,  66,  65,  64,  65,  64,  62,  62,  63,  63,  63,  64,  65,  66,  65,  64,  64,  65,  64,  64,  63,  62,  62,  52,  57,  65,  64,  64,  63,  61,  59,  58,  56,  54,  53,  51,  50,  47,
+  /* -13.0 */  41,  44,  41,  36,  36,  34,  32,  29,  28,  25,  24,  21,  19,  17,  15,  14,  13,  14,  13,  12,  10,   9,   8,   7,   7,   6,   4,   4,   3,   2,   1,   0,  -0,  -1,  -3,  -3,  -4,  -4,  -5,  -5,  -6,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -6,  -7,  -7,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -4,  -4,  -2,  -1,   1,   4,   6,   6,   7,  17,  32,  36,  34,  36,  41,  37,  31,  30,  31,  31,  29,  27,  24,  21,  19,  17,  13,  12,  11,   5,  -2,  -5,  -8,  -8,  -8, -11, -12, -12, -16, -18, -14, -13, -14, -16, -13, -12, -11, -11, -11, -12, -13, -12, -10,  -9,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -5,  -4,  -3,  -1,   1,   2,   4,   5,   7,   9,   9,   9,  10,  10,  10,  11,  12,  12,  14,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  14,  15,  16,  17,  18,  22,  21,  22,  22,  18,  15,  13,  11,   8,   5,   4,   2,   1,   0,  -2,  -5,  -5,  -6, -10, -14, -12, -15, -19, -17, -21, -22, -21, -22, -25, -27, -28, -27, -22, -27, -27, -21, -18, -21, -26, -26, -27, -28, -27, -28, -29, -30, -32, -34, -31, -34, -36, -37, -38, -39, -42, -44, -46, -49, -51, -54, -57, -59, -60, -62, -64, -64, -64, -64, -65, -65, -65, -66, -67, -65, -66, -63, -60, -61, -59, -57, -56, -53, -48, -43, -42, -40, -38, -37, -31, -26, -24, -22, -19, -17, -13, -10,  -6,  -4,  -3,   1,   3,   5,   7,  11,  12,  15,  18,  23,  26,  29,  32,  35,  36,  37,  39,  42,  44,  46,  49,  52,  54,  55,  56,  57,  58,  58,  59,  60,  61,  64,  67,  65,  64,  66,  65,  65,  65,  64,  64,  64,  64,  65,  67,  68,  68,  66,  66,  64,  65,  64,  63,  62,  59,  48,  59,  62,  62,  62,  60,  59,  57,  56,  54,  52,  50,  48,  46,  41,
+  /* -12.0 */  43,  41,  39,  35,  34,  31,  31,  27,  26,  25,  23,  20,  18,  17,  15,  15,  14,  14,  14,  13,  10,   9,   8,   7,   7,   6,   5,   4,   3,   3,   2,   1,   0,  -0,  -2,  -2,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -8,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   3,   4,   2,  10,  24,  32,  33,  31,  31,  31,  28,  27,  29,  29,  30,  27,  23,  21,  19,  18,  15,  11,   9,   8,   2,  -5,  -8, -10,  -9, -11, -14, -16, -14, -15, -17, -16, -16, -16, -16, -13, -12, -12, -12, -11, -12, -13, -12, -11,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -2,  -0,   2,   3,   5,   6,   7,   9,  10,  10,  10,  10,  11,  11,  12,  12,  12,  13,  13,  12,  12,  11,  11,  11,  11,  11,  11,  12,  12,  13,  14,  15,  16,  17,  17,  19,  21,  22,  21,  19,  15,  12,  10,   7,   5,   3,   1,  -0,  -2,  -3,  -5,  -7,  -9, -10, -13, -13, -16, -19, -19, -23, -24, -24, -23, -26, -27, -26, -24, -27, -28, -29, -25, -24, -26, -29, -29, -30, -30, -30, -31, -32, -33, -35, -37, -34, -36, -39, -41, -42, -44, -46, -48, -51, -53, -55, -58, -61, -63, -64, -66, -68, -68, -68, -68, -68, -69, -68, -68, -69, -68, -67, -65, -62, -63, -59, -58, -56, -52, -48, -44, -39, -38, -36, -33, -28, -24, -21, -17, -14, -13,  -9,  -7,  -3,   0,   3,   6,   7,   8,  10,  13,  15,  17,  21,  23,  25,  30,  35,  37,  38,  41,  43,  45,  46,  49,  52,  54,  56,  57,  59,  60,  61,  62,  62,  62,  63,  67,  69,  68,  67,  68,  67,  67,  65,  65,  66,  66,  66,  67,  65,  67,  68,  67,  63,  67,  64,  62,  61,  60,  56,  46,  58,  61,  60,  60,  58,  57,  53,  52,  50,  49,  46,  46,  42,  43,
+  /* -11.0 */  39,  38,  34,  33,  31,  29,  28,  27,  26,  24,  22,  20,  19,  17,  17,  15,  15,  15,  15,  12,  11,   9,   8,   8,   7,   6,   6,   5,   5,   4,   3,   3,   2,   1,  -0,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -8,  -9,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -9,  -9, -10, -10, -11, -11, -11, -11, -11, -11, -11, -10, -10, -10,  -9,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -1,   1,   2,  -0,   2,  15,  27,  32,  31,  29,  28,  26,  27,  28,  28,  27,  27,  24,  21,  19,  18,  15,  11,   7,   2,  -2,  -4,  -9, -10, -10, -11, -12, -16, -19, -17, -16, -16, -16, -17, -17, -16, -16, -13, -12, -13, -12, -10, -10, -12, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -7,  -6,  -5,  -3,  -1,   1,   2,   4,   6,   7,   8,  10,  11,  12,  11,  11,  11,  11,  12,  13,  13,  13,  13,  12,  12,  12,  11,  11,  11,  10,  10,  11,  11,  12,  13,  14,  14,  15,  17,  18,  18,  20,  19,  16,  13,  10,   8,   6,   4,   1,  -1,  -1,  -3,  -4,  -6,  -9, -10, -11, -12, -14, -15, -17, -18, -22, -25, -24, -24, -27, -27, -29, -29, -30, -31, -30, -31, -30, -30, -31, -30, -31, -32, -32, -33, -34, -36, -37, -38, -36, -38, -42, -45, -47, -48, -50, -52, -55, -57, -58, -62, -65, -67, -69, -70, -71, -72, -72, -72, -72, -72, -72, -70, -70, -70, -68, -67, -63, -65, -60, -57, -55, -52, -48, -44, -39, -37, -33, -29, -26, -23, -19, -14,  -8,  -8,  -7,  -5,  -2,  -0,   3,   5,   5,   4,   7,  11,  13,  16,  18,  23,  27,  29,  30,  31,  37,  42,  46,  48,  49,  52,  55,  57,  59,  59,  60,  62,  63,  64,  66,  66,  67,  69,  72,  72,  70,  70,  69,  68,  69,  72,  75,  74,  74,  72,  70,  65,  69,  68,  65,  64,  58,  62,  56,  55,  52,  54,  58,  59,  57,  56,  52,  51,  49,  46,  45,  43,  41,  40,  39,  39,
+  /* -10.0 */  35,  33,  31,  30,  29,  27,  27,  26,  25,  22,  21,  20,  18,  17,  16,  15,  16,  15,  14,  13,  11,  10,   8,   8,   7,   7,   7,   6,   6,   5,   5,   4,   2,   2,   0,  -1,  -1,  -2,  -2,  -3,  -3,   1,  -2,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -1,   1,   0,  -1,   9,  20,  24,  28,  27,  23,  26,  26,  27,  27,  26,  25,  23,  21,  18,  16,  14,  11,   7,   3,  -1,  -4,  -4,  -7, -10, -12, -12, -13, -15, -19, -19, -19, -19, -17, -16, -15, -17, -17, -14, -12, -12, -11,  -9,  -9, -12, -11, -11, -11, -10, -10,  -9,  -8,  -7,  -7,  -6,  -4,  -3,  -1,   2,   4,   5,   7,   8,   9,  10,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  11,  10,  10,  10,  10,  10,  10,  11,  11,  12,  13,  14,  15,  17,  17,  17,  16,  13,  11,   8,   6,   4,   2,  -2,  -4,  -5,  -5,  -7,  -6,  -9, -13, -12, -11, -12, -17, -15, -19, -22, -23, -24, -27, -31, -30, -32, -32, -33, -33, -34, -33, -33, -32, -30, -32, -33, -33, -34, -35, -36, -38, -39, -38, -39, -42, -46, -49, -51, -52, -54, -56, -59, -61, -63, -65, -68, -71, -73, -74, -75, -76, -76, -76, -75, -75, -75, -74, -71, -70, -69, -68, -65, -65, -60, -58, -54, -52, -47, -43, -39, -35, -32, -27, -23, -21, -16, -11,  -6,  -5,  -8,  -7,  -4,  -2,   1,   5,  10,  10,  11,  14,  16,  19,  27,  36,  34,  27,  27,  33,  33,  36,  42,  47,  50,  52,  55,  58,  60,  61,  63,  65,  64,  66,  68,  69,  70,  72,  74,  74,  71,  69,  69,  75,  78,  78,  77,  74,  73,  73,  71,  70,  67,  66,  63,  63,  63,  58,  60,  60,  58,  58,  57,  56,  54,  51,  50,  47,  44,  43,  41,  39,  38,  36,  35,  35,
+  /*  -9.0 */  32,  29,  29,  27,  26,  25,  24,  24,  23,  22,  20,  19,  17,  17,  16,  15,  15,  15,  13,  12,  11,   9,  12,   9,   8,   8,   8,   7,   7,   7,   5,   5,   3,   2,   1,   0,   0,  -0,  -1,  -0,   2,  -2,  -3,  -3,  -4,  -6,  -7,  -8,  -8,  -9, -10, -10, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -12, -12, -12, -11, -11, -10, -10,  -9,  -9,  -9,  -9,  -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -10,  -9,  -8,  -7,  -5,  -4,  -2,  -0,   0,  -2,   6,  14,  19,  19,  18,  19,  21,  25,  25,  26,  26,  24,  23,  20,  17,  14,  12,  11,   8,   4,   1,  -3,  -5,  -8, -10, -13, -15, -16, -16, -17, -21, -22, -21, -21, -20, -19, -18, -16, -14, -14, -12, -11,  -9,  -8,  -7,  -8, -11, -11, -11, -10, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -2,  -0,   2,   4,   6,   8,   9,  10,  12,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  12,  10,  10,   9,   9,   9,   9,   9,  10,  10,  11,  11,  13,  16,  16,  15,  13,  10,   8,   6,   4,   2,  -0,  -3,  -6,  -8, -10,  -9,  -8, -12, -14, -13, -11, -12, -14, -13, -19, -21, -24, -25, -31, -33, -33, -34, -35, -35, -37, -34, -38, -35, -34, -34, -34, -36, -35, -36, -37, -38, -40, -41, -40, -44, -46, -49, -52, -54, -56, -58, -60, -63, -64, -66, -69, -72, -75, -76, -78, -79, -80, -80, -79, -78, -77, -77, -76, -74, -72, -70, -68, -65, -65, -60, -58, -55, -50, -46, -42, -37, -32, -30, -25, -21, -17, -13, -10,  -9,  -9,  -6,  -3,   1,   7,  11,  16,  21,  24,  27,  31,  35,  33,  36,  40,  37,  35,  32,  37,  42,  42,  37,  34,  41,  46,  52,  56,  60,  62,  65,  67,  66,  67,  69,  70,  71,  73,  75,  74,  74,  71,  77,  82,  78,  78,  78,  77,  74,  73,  71,  70,  69,  67,  63,  62,  62,  54,  60,  59,  56,  56,  54,  52,  49,  48,  45,  43,  42,  41,  39,  38,  36,  35,  33,  32,
+  /*  -8.0 */  29,  27,  26,  25,  24,  22,  21,  21,  20,  20,  19,  18,  17,  17,  17,  16,  15,  15,  14,  12,  12,  10,  10,  10,   9,   9,   9,   9,   8,   8,   6,   5,   4,   3,   2,   2,   2,   1,   0,   3,   1,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -8,  -9, -10, -10, -11, -12, -12, -12, -13, -13, -13, -14, -13, -13, -13, -13, -13, -13, -12, -12, -11, -11, -11, -10, -10, -10, -11, -11, -11, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -12, -12, -11, -10,  -9,  -8,  -7,  -5,  -4,  -2,  -0,  -0,  -2,   9,  15,  20,  13,  12,  15,  21,  23,  24,  26,  24,  22,  20,  18,  15,  11,  10,   8,   4,   1,  -1,  -4,  -7, -10, -14, -16, -18, -19, -19, -20, -22, -23, -23, -23, -23, -23, -22, -19, -16, -13, -11, -10,  -8,  -6,  -5,  -5, -10, -11, -11, -11,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -2,   0,   2,   4,   6,   8,  10,  11,  12,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  13,  13,  10,  10,   9,   9,   8,   8,   8,   9,   9,  10,  11,  13,  13,  12,  10,   7,   6,   4,   1,  -1,  -3,  -5,  -7,  -8, -12, -14, -11, -12, -11, -14, -14, -15, -17, -15, -17, -22, -25, -27, -29, -34, -35, -36, -37, -38, -40, -36, -40, -38, -36, -37, -36, -37, -38, -38, -39, -41, -42, -43, -44, -47, -50, -53, -55, -58, -60, -61, -63, -66, -69, -69, -72, -76, -79, -80, -82, -82, -83, -84, -83, -82, -81, -80, -79, -77, -75, -72, -70, -66, -65, -61, -58, -54, -50, -45, -42, -35, -30, -26, -23, -19, -15, -13, -12, -12,  -7,   2,  12,  19,  24,  25,  27,  30,  33,  34,  33,  35,  37,  37,  38,  38,  41,  43,  45,  46,  48,  46,  42,  42,  46,  47,  51,  59,  63,  66,  67,  68,  69,  70,  71,  72,  74,  75,  75,  74,  75,  84,  75,  68,  72,  73,  69,  71,  69,  69,  68,  70,  65,  63,  61,  57,  59,  58,  56,  54,  51,  50,  49,  47,  44,  42,  41,  39,  39,  37,  36,  34,  33,  31,  29,
+  /*  -7.0 */  27,  25,  24,  22,  21,  21,  20,  19,  20,  19,  18,  17,  17,  17,  17,  16,  15,  14,  14,  13,  12,  12,  11,  11,  11,  10,  10,   9,   9,   8,   7,   6,   5,   4,   4,   3,   3,   3,   2,   0,  -0,  -0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -10, -11, -12, -12, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -12, -12, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -13, -14, -13, -13, -13, -12, -12, -11, -10,  -8,  -7,  -5,  -3,  -2,  -0,  -2,   3,   9,  17,  19,  11,  12,  16,  20,  22,  23,  24,  23,  22,  19,  16,  13,   9,   7,   4,   1,  -2,  -4,  -6,  -9, -12, -16, -18, -20, -21, -21, -21, -22, -23, -24, -24, -25, -24, -23, -21, -18, -14, -11, -10,  -9,  -6,  -4,  -4,  -9, -10,  -9,  -9,  -8,  -7,  -7,  -6,  -5,  -4,  -2,  -1,   1,   3,   5,   8,   9,  10,  12,  13,  14,  15,  16,  16,  16,  16,  16,  15,  15,  15,  16,  16,  16,  16,  15,  13,  11,  10,   9,   9,   8,   8,   7,   7,   8,  11,  13,  11,  10,   9,   7,   5,   3,   1,  -2,  -5,  -7,  -9, -10, -11, -13, -16, -15, -11, -11, -13, -14, -16, -16, -19, -20, -22, -25, -27, -30, -34, -36, -37, -38, -39, -40, -43, -43, -39, -39, -38, -38, -39, -39, -40, -42, -43, -44, -45, -49, -51, -53, -56, -58, -61, -63, -65, -66, -69, -73, -73, -74, -78, -82, -84, -85, -86, -86, -87, -86, -84, -82, -81, -81, -78, -76, -73, -70, -65, -64, -61, -58, -52, -48, -44, -40, -34, -29, -23, -18, -17, -15, -12,  -9,  -6,   8,  20,  22,  22,  24,  25,  28,  31,  34,  37,  39,  41,  43,  44,  44,  49,  48,  48,  49,  50,  50,  50,  50,  50,  45,  42,  46,  54,  63,  67,  68,  70,  70,  70,  72,  73,  75,  76,  77,  77,  78,  73,  60,  59,  65,  67,  70,  68,  60,  63,  70,  67,  62,  59,  56,  59,  58,  55,  53,  52,  50,  48,  46,  44,  42,  40,  39,  37,  37,  35,  32,  31,  30,  29,  27,
+  /*  -6.0 */  26,  24,  22,  21,  20,  19,  19,  18,  19,  18,  17,  17,  17,  17,  17,  16,  16,  15,  15,  14,  13,  12,  12,  12,  12,  11,  11,  10,  10,  10,   9,   7,   7,   6,   5,   5,   4,   3,   3,   1,   1,   0,  -1,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -10, -11, -12, -13, -14, -14, -14, -15, -15, -15, -15, -16, -16, -15, -15, -15, -15, -14, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -12, -11,  -9,  -8,  -6,  -5,  -3,  -1,  -0,  -3,   8,  10,  17,  19,  14,  13,  15,  18,  20,  22,  23,  23,  21,  18,  14,  12,   8,   3,   1,  -2,  -5,  -6,  -9, -11, -14, -17, -19, -21, -21, -22, -22, -23, -24, -24, -26, -25, -24, -23, -22, -19, -15, -12, -11,  -8,  -7,  -5,  -5,  -8,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -3,  -2,  -1,   1,   2,   4,   6,   8,  10,  12,  13,  14,  15,  16,  17,  18,  17,  17,  16,  16,  16,  16,  16,  17,  17,  17,  16,  15,  12,  11,   9,   9,   8,   7,   7,   7,   8,   9,  11,   7,   6,   5,   4,   1,  -1,  -4,  -6,  -8, -10, -13, -15, -15, -15, -16, -15, -13, -13, -13, -15, -18, -18, -20, -20, -19, -23, -28, -32, -34, -37, -39, -39, -40, -41, -42, -42, -42, -41, -40, -40, -39, -41, -42, -43, -44, -45, -49, -51, -54, -56, -59, -61, -64, -66, -68, -69, -72, -76, -77, -76, -80, -86, -87, -88, -89, -89, -90, -90, -89, -87, -86, -84, -81, -77, -75, -71, -66, -63, -61, -56, -51, -48, -44, -37, -31, -27, -21, -17, -17, -12, -10,  -4,   8,  14,  19,  21,  24,  26,  28,  31,  34,  37,  40,  42,  44,  46,  47,  50,  49,  51,  52,  55,  55,  54,  54,  53,  53,  50,  35,  44,  53,  58,  66,  68,  70,  70,  70,  73,  75,  79,  81,  82,  81,  72,  71,  70,  75,  81,  75,  60,  57,  56,  71,  65,  63,  60,  60,  60,  58,  56,  54,  52,  49,  47,  45,  44,  42,  40,  39,  37,  36,  34,  33,  32,  31,  28,  27,  26,
+  /*  -5.0 */  24,  23,  21,  20,  20,  19,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  16,  15,  14,  14,  13,  13,  13,  13,  12,  12,  12,  11,  11,  10,   9,   8,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -12, -12, -13, -14, -14, -15, -15, -16, -16, -17, -17, -17, -17, -16, -16, -16, -16, -15, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -10,  -9,  -8,  -6,  -4,  -2,  -0,   1,  -2,  11,  17,  18,  11,  10,  11,  15,  19,  21,  21,  22,  20,  19,  15,  13,  10,   6,   0,  -3,  -4,  -6,  -8, -11, -13, -16, -18, -20, -21, -22, -22, -22, -24, -25, -25, -26, -26, -25, -23, -22, -19, -15, -12, -10,  -8,  -7,  -6,  -7,  -8,  -8,  -7,  -6,  -5,  -5,  -4,  -3,  -2,  -1,   0,   2,   3,   5,   7,   9,  11,  12,  14,  15,  16,  17,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  14,  12,  10,   9,   8,   8,   7,   7,   6,   6,   4,   4,   3,   2,   0,  -2,  -6,  -8, -10, -12, -14, -15, -16, -17, -16, -16, -15, -13, -15, -15, -16, -19, -20, -19, -19, -18, -23, -27, -30, -34, -38, -40, -41, -42, -42, -43, -43, -43, -43, -42, -42, -41, -43, -41, -41, -44, -49, -51, -54, -56, -59, -61, -64, -66, -69, -71, -72, -75, -78, -81, -81, -84, -88, -90, -91, -91, -92, -93, -93, -92, -88, -87, -86, -83, -79, -76, -72, -67, -64, -60, -56, -50, -46, -42, -35, -30, -24, -19, -19, -15,  -9,  -4,   8,  13,  16,  20,  23,  26,  28,  30,  33,  36,  40,  43,  45,  47,  47,  50,  54,  54,  57,  57,  56,  56,  58,  58,  58,  56,  55,  43,  49,  59,  57,  68,  68,  70,  69,  72,  76,  81,  84,  81,  77,  70,  68,  74,  78,  80,  82,  80,  74,  58,  60,  64,  66,  66,  63,  61,  59,  57,  54,  52,  50,  47,  45,  43,  42,  41,  39,  37,  35,  34,  33,  31,  29,  28,  27,  26,  24,
+  /*  -4.0 */  24,  22,  21,  20,  19,  19,  18,  18,  18,  18,  16,  17,  17,  16,  17,  17,  17,  16,  15,  14,  14,  14,  14,  14,  14,  14,  13,  12,  13,  12,  12,  11,  10,   9,   8,   7,   6,   4,   3,   2,   1,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -9,  -9, -10, -11, -12, -13, -14, -15, -15, -16, -16, -17, -18, -18, -18, -18, -18, -18, -18, -17, -17, -16, -16, -16, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -14, -14, -14, -13, -13, -12, -11, -11,  -9,  -8,  -7,  -5,  -3,  -1,   1,   2,   0,   8,  16,  17,  13,  10,  12,  16,  20,  21,  21,  20,  18,  16,  13,  10,   8,   4,  -2,  -5,  -6,  -7,  -8, -10, -12, -16, -20, -20, -20, -21, -22, -23, -24, -25, -25, -26, -27, -26, -23, -21, -19, -15, -13, -10,  -8,  -9,  -8,  -8,  -7,  -6,  -6,  -6,  -4,  -3,  -3,  -2,  -1,   0,   1,   3,   5,   6,   7,  10,  11,  13,  14,  16,  17,  18,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  15,  14,  12,  11,   9,   8,   8,   5,   5,   5,   3,   3,   3,   1,  -2,  -6,  -9, -10, -13, -14, -15, -17, -18, -18, -18, -16, -15, -12, -12, -15, -17, -19, -20, -19, -19, -18, -21, -24, -31, -33, -37, -40, -41, -43, -44, -44, -44, -44, -44, -44, -44, -44, -44, -42, -44, -49, -51, -54, -56, -59, -61, -64, -67, -69, -71, -73, -75, -77, -81, -84, -86, -87, -90, -92, -93, -94, -94, -95, -94, -94, -91, -87, -87, -85, -80, -76, -73, -66, -63, -60, -55, -49, -44, -39, -33, -28, -22, -19, -19, -10,  -3,   7,  11,  14,  17,  21,  24,  27,  29,  32,  35,  39,  42,  44,  48,  50,  48,  51,  57,  57,  61,  59,  56,  58,  59,  59,  59,  59,  58,  57,  54,  65,  67,  70,  76,  81,  82,  81,  77,  79,  78,  77,  75,  75,  77,  79,  81,  81,  80,  78,  74,  66,  63,  63,  65,  64,  61,  59,  56,  54,  52,  50,  48,  45,  44,  43,  41,  40,  38,  35,  34,  32,  30,  29,  29,  27,  26,  25,  24,
+  /*  -3.0 */  23,  21,  20,  20,  19,  19,  18,  18,  18,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  14,  14,  15,  15,  14,  14,  14,  14,  14,  13,  12,  11,  10,   9,   8,   7,   6,   5,   4,   3,   1,  -0,  -1,  -3,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -17, -18, -18, -19, -19, -19, -20, -19, -19, -19, -18, -18, -18, -17, -17, -16, -16, -16, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -13, -12, -12, -11, -10,  -8,  -7,  -6,  -4,  -3,  -0,   2,   4,   3,   5,  10,  22,  16,  10,  14,  18,  20,  20,  19,  18,  17,  14,  10,   8,   6,   2,  -2,  -4,  -7,  -9, -12, -15, -15, -15, -18, -18, -19, -20, -22, -22, -24, -25, -26, -26, -27, -27, -24, -22, -20, -16, -13, -11, -11, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   4,   5,   6,   8,  10,  11,  13,  15,  16,  18,  19,  20,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  17,  15,  14,  13,  11,  10,   8,   8,   7,   4,   4,   5,   4,   2,  -2,  -8, -11, -13, -15, -15, -18, -20, -19, -19, -18, -16, -14,  -9,  -9, -13, -16, -18, -19, -18, -18, -16, -20, -25, -30, -31, -38, -40, -41, -43, -45, -45, -46, -46, -45, -45, -45, -46, -46, -47, -49, -51, -53, -55, -58, -61, -64, -66, -69, -71, -73, -75, -77, -80, -84, -87, -89, -90, -92, -95, -96, -97, -97, -98, -98, -96, -93, -88, -89, -87, -82, -77, -73, -67, -63, -59, -54, -48, -43, -37, -31, -27, -21, -23, -15, -10,   4,   8,  12,  15,  18,  22,  25,  28,  31,  34,  38,  41,  43,  45,  50,  53,  54,  56,  61,  61,  61,  58,  58,  60,  60,  59,  58,  60,  60,  59,  63,  69,  69,  69,  69,  77,  78,  76,  77,  78,  77,  78,  78,  79,  79,  80,  79,  78,  77,  76,  71,  67,  62,  63,  63,  61,  59,  56,  54,  52,  50,  48,  45,  44,  42,  40,  39,  38,  37,  34,  33,  32,  30,  27,  26,  26,  25,  24,  23,
+  /*  -2.0 */  22,  21,  20,  19,  19,  19,  17,  17,  17,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  13,  12,  12,  11,  10,   9,   8,   6,   5,   4,   3,   1,  -0,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -11, -13, -14, -15, -16, -17, -18, -19, -19, -20, -20, -21, -21, -21, -21, -21, -20, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -16, -15, -15, -14, -14, -13, -13, -13, -12, -11, -11, -10,  -9,  -8,  -7,  -5,  -4,  -2,   0,   3,   5,   6,  11,  18,  23,  23,  14,  16,  19,  20,  19,  17,  16,  15,  14,  10,   7,   5,   1,  -2,  -5,  -7,  -9, -12, -15, -16, -17, -19, -22, -22, -22, -23, -23, -24, -25, -25, -25, -26, -26, -22, -20, -19, -17, -16, -16, -13, -12, -11, -10,  -8,  -7,  -6,  -4,  -4,  -2,  -1,   1,   2,   4,   5,   6,   8,   8,  10,  12,  13,  14,  15,  17,  18,  20,  20,  20,  20,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  16,  15,  14,  12,  11,  10,   7,   5,   7,   7,   4,   2,  -3,  -7, -11, -15, -18, -20, -21, -21, -21, -20, -19, -17, -14,  -7,  -8, -12, -16, -18, -18, -17, -19, -15, -20, -25, -29, -31, -38, -41, -41, -44, -45, -47, -47, -47, -47, -46, -47, -48, -48, -49, -51, -53, -55, -57, -60, -63, -66, -69, -71, -72, -75, -77, -79, -83, -86, -89, -91, -92, -93, -97, -98, -99,-100,-101,-100, -98, -94, -92, -90, -87, -83, -78, -72, -68, -64, -59, -54, -47, -42, -36, -30, -26, -25, -17, -16,  -3,   5,   8,  12,  15,  19,  22,  26,  29,  33,  36,  39,  42,  45,  48,  51,  53,  51,  57,  64,  64,  61,  61,  61,  62,  64,  62,  59,  64,  68,  69,  71,  71,  70,  72,  72,  74,  75,  74,  71,  71,  73,  76,  78,  78,  78,  78,  76,  74,  73,  70,  66,  63,  62,  62,  61,  60,  57,  54,  51,  49,  48,  46,  44,  42,  41,  40,  38,  37,  35,  33,  32,  30,  27,  28,  27,  25,  24,  23,  22,
+  /*  -1.0 */  21,  20,  20,  19,  19,  17,  17,  17,  16,  16,  16,  15,  14,  16,  15,  14,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  15,  14,  14,  13,  12,  12,  11,  10,   9,   8,   7,   5,   4,   2,   1,  -0,  -2,  -3,  -5,  -6,  -7,  -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -23, -22, -22, -22, -21, -21, -20, -19, -19, -18, -18, -17, -17, -17, -16, -16, -15, -14, -14, -13, -13, -12, -11, -11, -10, -10,  -6,  -4,  -4,  -3,  -2,  -1,   1,   4,   7,   9,  10,  16,  24,  23,  15,  17,  19,  20,  19,  17,  15,  14,  12,   8,   5,   2,  -1,  -3,  -6,  -8,  -9, -12, -15, -18, -20, -21, -24, -24, -23, -24, -23, -25, -25, -25, -25, -24, -22, -22, -23, -22, -20, -18, -16, -14, -12, -10,  -8,  -6,  -4,  -2,  -1,   1,   4,   5,   6,   6,   7,   7,   8,   8,   9,  10,  13,  15,  17,  18,  18,  19,  19,  20,  20,  20,  20,  20,  19,  19,  18,  18,  18,  18,  18,  18,  17,  18,  17,  17,  16,  16,  14,  14,  12,   9,   8,   8,   6,   4,   0,  -4,  -8, -13, -15, -19, -21, -21, -21, -21, -20, -18, -16, -12,  -7,  -8, -12, -14, -17, -17, -15, -15, -16, -20, -24, -28, -31, -34, -40, -42, -43, -45, -48, -49, -48, -49, -48, -48, -49, -50, -51, -53, -54, -56, -59, -62, -64, -67, -70, -72, -74, -77, -78, -81, -85, -88, -91, -94, -93, -95, -99, -99,-100,-101,-102,-101,-100, -97, -95, -92, -88, -84, -79, -74, -67, -62, -59, -54, -47, -41, -35, -29, -27, -23, -17, -12,  -0,   3,   8,  11,  15,  19,  22,  26,  30,  34,  37,  41,  45,  48,  50,  54,  54,  54,  55,  62,  61,  64,  61,  50,  44,  45,  55,  68,  71,  72,  74,  77,  79,  78,  75,  75,  72,  70,  69,  72,  73,  73,  73,  73,  73,  73,  72,  71,  69,  64,  62,  60,  60,  59,  60,  59,  58,  56,  53,  50,  48,  46,  44,  42,  41,  39,  39,  37,  35,  33,  32,  31,  28,  28,  28,  26,  24,  24,  22,  21,
+  /*   0.0 */  21,  20,  20,  19,  19,  18,  17,  16,  15,  15,  15,  15,  15,  15,  14,  15,  16,  16,  16,  16,  16,  17,  16,  16,  17,  16,  15,  14,  14,  13,  13,  12,  11,  10,   9,   8,   6,   5,   3,   2,   1,  -1,  -2,  -4,  -6,  -7,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -24, -24, -24, -23, -23, -22, -22, -21, -20, -20, -19, -19, -18, -18, -17, -16, -16, -15, -14, -13, -13, -12, -11, -11, -10,  -9,  -8,  -6,  -4,  -4,  -3,  -2,  -0,   1,   3,   6,  10,   9,  14,  22,  25,  17,  18,  20,  21,  19,  19,  17,  14,  11,   7,   3,   0,  -2,  -5,  -7,  -8, -10, -13, -16, -19, -21, -23, -25, -26, -25, -24, -24, -26, -27, -26, -26, -25, -23, -25, -25, -23, -20, -19, -16, -14, -12, -10,  -8,  -7,  -4,  -2,   0,   2,   4,   6,   8,   9,  10,  10,  10,  11,  12,  13,  13,  15,  17,  18,  19,  19,  19,  19,  19,  19,  20,  19,  19,  19,  19,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  17,  16,  14,  12,   9,   9,   8,   6,   3,  -1,  -4,  -8, -11, -15, -17, -19, -20, -21, -21, -19, -17, -15, -12,  -7, -10, -12, -12, -14, -16, -16, -14, -12, -19, -23, -27, -30, -33, -35, -41, -43, -45, -48, -49, -50, -49, -49, -49, -50, -51, -52, -53, -55, -58, -60, -63, -66, -68, -71, -73, -75, -78, -80, -83, -86, -89, -92, -95, -95, -96,-100,-101,-102,-103,-103,-103,-102, -99, -94, -93, -89, -84, -79, -74, -69, -63, -58, -53, -47, -40, -34, -30, -29, -19, -13,  -7,  -2,   2,   6,  10,  14,  18,  22,  26,  30,  34,  37,  41,  45,  50,  54,  55,  55,  53,  54,  58,  61,  63,  56,  55,  51,  47,  69,  72,  74,  77,  76,  73,  74,  73,  72,  68,  68,  70,  71,  72,  72,  72,  72,  71,  69,  68,  66,  66,  62,  63,  61,  59,  58,  59,  59,  59,  56,  54,  52,  49,  47,  45,  44,  42,  41,  39,  38,  36,  34,  32,  31,  29,  28,  28,  25,  25,  23,  23,  22,  21,
+  /*   1.0 */  19,  20,  19,  19,  18,  17,  17,  16,  15,  15,  15,  14,  14,  14,  15,  15,  15,  16,  16,  16,  16,  17,  17,  17,  16,  16,  15,  15,  14,  13,  12,  11,  11,  10,   8,   7,   6,   5,   3,   1,  -0,  -2,  -4,  -5,  -7,  -8,  -9, -11, -12, -13, -15, -16, -17, -18, -19, -21, -22, -23, -24, -24, -25, -25, -25, -25, -25, -25, -24, -24, -23, -22, -21, -21, -20, -19, -19, -18, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10,  -9,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   2,   3,   6,   8,  10,  12,  18,  28,  24,  19,  20,  22,  21,  20,  17,  14,  10,   6,   2,   1,  -1,  -6,  -8,  -9, -11, -14, -17, -20, -23, -25, -26, -28, -28, -27, -26, -27, -28, -27, -26, -26, -28, -27, -25, -22, -20, -18, -15, -13, -11,  -8,  -6,  -4,  -1,   1,   4,   5,   6,   7,   8,   9,  10,  10,  11,  12,  13,  13,  12,  12,  15,  16,  17,  17,  17,  18,  19,  19,  20,  20,  19,  19,  18,  18,  18,  18,  17,  17,  17,  16,  16,  16,  16,  15,  16,  14,  13,  11,  11,   9,   7,   4,  -0,  -3,  -6, -10, -13, -15, -18, -19, -19, -19, -18, -16, -14, -13, -11, -12, -13, -14, -14, -16, -12, -16, -14, -19, -24, -26, -29, -31, -33, -36, -42, -44, -47, -50, -51, -49, -50, -50, -51, -52, -53, -54, -56, -58, -61, -64, -66, -68, -71, -73, -76, -78, -81, -84, -88, -91, -94, -96, -96, -97,-100,-102,-103,-103,-103,-103,-102,-100, -96, -95, -91, -86, -80, -74, -68, -61, -58, -52, -47, -40, -35, -32, -26, -19, -12,  -7,  -3,   1,   4,   9,  13,  17,  21,  25,  29,  33,  37,  41,  45,  50,  55,  58,  58,  58,  56,  56,  64,  65,  63,  67,  68,  58,  65,  71,  72,  73,  74,  74,  74,  73,  71,  71,  71,  71,  71,  71,  71,  71,  70,  69,  68,  67,  66,  66,  62,  62,  59,  58,  57,  57,  57,  57,  55,  53,  50,  48,  46,  45,  43,  42,  40,  39,  37,  35,  33,  31,  31,  28,  29,  26,  26,  24,  23,  21,  20,  19,
+  /*   2.0 */  19,  19,  19,  18,  18,  17,  16,  15,  15,  14,  14,  14,  14,  14,  14,  15,  15,  16,  15,  16,  17,  17,  18,  18,  16,  15,  14,  14,  14,  13,  12,  11,  10,   9,   7,   6,   5,   4,   2,   0,  -1,  -3,  -4,  -6,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -20, -21, -22, -23, -24, -25, -26, -26, -27, -27, -27, -26, -26, -25, -25, -24, -23, -23, -22, -21, -20, -19, -18, -18, -17, -16, -15, -14, -13, -12, -10, -10,  -9,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   0,   1,   3,   5,   7,   9,  11,  11,  13,  20,  26,  24,  20,  20,  20,  18,  14,  11,   8,   4,  -0,  -1,  -4,  -6,  -9, -10, -12, -16, -19, -22, -24, -26, -28, -29, -29, -29, -28, -29, -29, -28, -30, -32, -29, -27, -24, -22, -20, -17, -15, -13, -10,  -8,  -5,  -2,   0,   3,   5,   7,   7,   8,   9,  10,  10,  11,  11,  12,  12,  12,  13,  13,  14,  14,  15,  16,  18,  20,  20,  20,  19,  18,  18,  18,  19,  19,  18,  17,  17,  17,  17,  16,  16,  16,  15,  15,  16,  14,  13,  13,  12,   9,   7,   4,   0,  -1,  -3,  -7, -10, -14, -16, -18, -16, -16, -15, -14, -13, -13, -11, -11, -13, -14, -14, -16, -15, -17, -16, -20, -23, -25, -28, -30, -30, -33, -36, -40, -46, -50, -51, -50, -50, -51, -52, -53, -54, -55, -56, -58, -61, -63, -66, -68, -71, -74, -76, -79, -81, -85, -89, -92, -95, -97, -97, -99,-100,-102,-104,-104,-104,-104,-103,-102, -99, -95, -90, -85, -80, -73, -66, -61, -56, -51, -47, -43, -39, -32, -27, -21, -10,  -7,  -4,  -0,   4,   8,  12,  15,  20,  23,  26,  30,  34,  38,  41,  45,  53,  56,  58,  57,  54,  54,  59,  59,  60,  64,  70,  62,  56,  68,  69,  72,  74,  74,  74,  73,  72,  71,  70,  70,  70,  69,  70,  69,  68,  67,  66,  66,  65,  64,  62,  60,  57,  56,  56,  56,  56,  55,  54,  52,  50,  47,  46,  44,  42,  40,  39,  38,  36,  34,  32,  31,  30,  27,  28,  26,  25,  23,  21,  21,  20,  19,
+  /*   3.0 */  19,  18,  18,  17,  17,  16,  16,  15,  14,  14,  14,  14,  14,  14,  14,  15,  15,  16,  16,  17,  17,  18,  17,  17,  16,  15,  14,  14,  12,  11,  10,  10,   9,   8,   7,   5,   4,   3,   1,  -0,  -2,  -3,  -5,  -7,  -9, -10, -11, -13, -14, -16, -17, -18, -20, -21, -22, -23, -25, -25, -26, -27, -28, -28, -28, -28, -28, -27, -26, -26, -25, -24, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -12, -11, -10,  -9,  -8,  -7,  -5,  -4,  -3,  -2,  -1,   0,   1,   2,   4,   5,   7,  10,  12,  13,  11,  15,  24,  27,  18,  18,  16,  12,   9,   6,   3,   1,  -3,  -6,  -7,  -6, -10, -13, -14, -17, -20, -23, -26, -28, -29, -30, -30, -30, -31, -31, -29, -29, -31, -31, -29, -27, -25, -23, -21, -18, -15, -12, -10,  -7,  -4,  -2,   1,   4,   5,   6,   8,   8,   9,  10,  11,  11,  12,  13,  13,  15,  15,  15,  16,  17,  18,  18,  19,  20,  21,  20,  21,  20,  20,  20,  19,  18,  18,  18,  17,  17,  17,  16,  15,  14,  16,  17,  17,  16,  15,  15,  13,  11,   8,   6,   3,   1,  -0,  -3,  -7, -10, -13, -14, -13, -12, -12, -11, -12, -12, -11, -11, -13, -14, -13, -13, -15, -17, -18, -20, -21, -24, -27, -29, -30, -31, -35, -37, -41, -47, -50, -50, -52, -51, -53, -53, -54, -56, -57, -59, -61, -63, -66, -68, -71, -73, -76, -79, -82, -86, -90, -93, -95, -98, -96, -99,-101,-103,-104,-103,-104,-104,-104,-102, -99, -95, -91, -85, -80, -74, -67, -60, -55, -51, -49, -44, -37, -31, -29, -19, -12,  -9,  -5,  -1,   2,   5,   9,  13,  18,  21,  24,  28,  31,  35,  40,  45,  50,  54,  57,  55,  55,  57,  59,  62,  65,  68,  70,  67,  56,  62,  67,  73,  73,  74,  73,  72,  71,  70,  69,  69,  69,  68,  68,  68,  67,  66,  65,  64,  64,  63,  61,  57,  56,  54,  54,  55,  55,  54,  53,  50,  49,  47,  46,  43,  41,  40,  38,  36,  34,  32,  30,  30,  29,  26,  28,  25,  24,  22,  21,  20,  19,  19,
+  /*   4.0 */  17,  17,  16,  16,  17,  16,  15,  14,  14,  14,  13,  13,  14,  13,  14,  14,  15,  16,  17,  16,  17,  17,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   7,   6,   5,   4,   3,   2,   0,  -1,  -3,  -4,  -6,  -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -22, -23, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -27, -27, -26, -25, -24, -23, -21, -20, -19, -18, -17, -16, -14, -13, -12, -11, -10,  -9,  -8,  -7,  -5,  -4,  -3,  -2,  -0,   1,   3,   4,   5,   7,   9,  10,  13,  14,  13,  10,  17,  27,  18,  19,  10,   6,   4,   2,  -1,  -3,  -6,  -7,  -8,  -9, -12, -14, -15, -18, -22, -24, -27, -31, -33, -33, -32, -33, -34, -32, -29, -30, -31, -32, -30, -28, -26, -23, -21, -18, -15, -13, -10,  -7,  -4,  -1,   2,   4,   5,   6,   8,   9,  10,  10,  12,  12,  13,  14,  15,  16,  16,  17,  17,  18,  19,  19,  20,  21,  22,  22,  24,  25,  24,  23,  22,  21,  20,  20,  19,  18,  17,  16,  15,  17,  19,  21,  19,  18,  20,  16,  15,  14,  12,  10,   8,   5,   3,  -3,  -6,  -8,  -9, -10, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -12, -11, -14, -16, -17, -16, -18, -22, -26, -30, -30, -31, -34, -37, -39, -43, -47, -49, -53, -54, -52, -53, -54, -55, -57, -59, -61, -63, -65, -67, -70, -73, -77, -80, -83, -87, -90, -93, -96, -98, -96,-100,-101,-103,-104,-104,-106,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -55, -51, -51, -44, -43, -33, -22, -20, -15, -11,  -7,  -2,   1,   3,   6,  10,  15,  19,  22,  25,  29,  33,  37,  42,  47,  52,  56,  55,  57,  59,  61,  63,  66,  68,  69,  70,  62,  65,  66,  71,  72,  72,  72,  71,  70,  69,  68,  67,  67,  67,  67,  67,  66,  65,  64,  63,  62,  62,  59,  57,  55,  53,  53,  54,  54,  52,  53,  49,  48,  47,  45,  41,  41,  38,  36,  34,  33,  31,  30,  28,  28,  25,  26,  24,  23,  21,  19,  19,  18,  17,
+  /*   5.0 */  16,  16,  16,  16,  16,  15,  13,  13,  13,  13,  12,  12,  13,  13,  14,  14,  15,  16,  16,  17,  16,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   8,   6,   5,   4,   3,   1,  -0,  -1,  -3,  -4,  -6,  -8, -10, -12, -13, -15, -16, -17, -19, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -31, -31, -31, -30, -29, -29, -28, -27, -26, -24, -23, -22, -21, -19, -18, -17, -15, -14, -13, -11, -10,  -9,  -8,  -7,  -6,  -5,  -4,  -3,  -1,   0,   2,   4,   6,   6,   8,   9,  10,  12,  13,  14,  12,  16,  27,  23,  22,  13,   3,  -0,  -2,  -5,  -6,  -5,  -8,  -9, -10, -15, -13, -14, -19, -24, -25, -27, -33, -34, -33, -34, -34, -34, -36, -35, -35, -34, -33, -31, -29, -26, -24, -21, -18, -16, -13, -10,  -7,  -4,  -1,   2,   4,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  17,  17,  17,  17,  18,  19,  20,  20,  21,  23,  23,  27,  30,  30,  29,  27,  26,  24,  25,  24,  22,  20,  20,  17,  16,  18,  21,  19,  19,  20,  21,  20,  18,  16,  14,  12,   9,   6,   4,  -1,  -5,  -8,  -8,  -7,  -9,  -9, -10, -11, -12, -11, -11, -11, -12, -13, -13, -13, -13, -15, -14, -15, -17, -21, -24, -29, -30, -31, -34, -36, -39, -41, -46, -49, -53, -54, -54, -53, -54, -55, -56, -57, -60, -62, -64, -66, -70, -74, -78, -81, -84, -88, -91, -94, -96, -97, -96,-100,-101,-102,-103,-105,-107,-106,-105,-103, -99, -95, -90, -86, -80, -73, -67, -60, -54, -52, -50, -49, -42, -29, -26, -21, -17, -13,  -8,  -3,  -1,   0,   3,   8,  12,  17,  20,  23,  27,  31,  34,  39,  44,  49,  54,  57,  59,  62,  62,  64,  66,  67,  64,  65,  53,  56,  68,  70,  69,  70,  71,  69,  68,  68,  67,  67,  66,  66,  65,  66,  65,  64,  63,  62,  61,  61,  59,  55,  54,  53,  52,  54,  52,  51,  51,  49,  47,  45,  43,  40,  40,  36,  34,  33,  30,  30,  29,  28,  27,  25,  24,  23,  22,  21,  18,  18,  17,  16,
+  /*   6.0 */  16,  16,  16,  16,  15,  13,  12,  11,  12,  12,  12,  12,  13,  13,  14,  14,  15,  15,  16,  17,  16,  16,  15,  14,  13,  13,  12,  11,  10,   8,   7,   6,   5,   4,   3,   1,   0,  -1,  -3,  -5,  -6,  -8, -10, -11, -13, -15, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -31, -31, -30, -29, -28, -26, -25, -24, -23, -21, -20, -18, -17, -15, -14, -12, -11, -10,  -9,  -8,  -6,  -5,  -4,  -3,  -2,  -1,   1,   3,   4,   6,   8,   9,  10,  13,  13,  14,  14,  12,  19,  26,  20,  13,  20,   6,  -3,  -5,  -7, -10,  -8,  -6,  -7, -13, -17, -16, -19, -23, -26, -27, -28, -32, -32, -32, -33, -33, -36, -38, -38, -38, -36, -34, -32, -30, -27, -24, -22, -19, -16, -13, -10,  -7,  -4,  -1,   2,   4,   5,   7,   8,   9,  10,  11,  12,  13,  15,  16,  17,  18,  18,  18,  19,  20,  21,  22,  23,  25,  28,  30,  31,  31,  29,  29,  27,  27,  28,  27,  27,  26,  25,  21,  19,  19,  20,  19,  20,  21,  22,  23,  20,  18,  15,  12,  10,   8,   5,   1,  -3,  -6,  -6,  -6,  -7,  -8,  -9, -11, -11, -10, -10, -11, -12, -13, -13, -13, -13, -13, -13, -13, -14, -18, -23, -26, -29, -30, -32, -34, -37, -40, -42, -49, -52, -53, -55, -54, -54, -54, -55, -57, -58, -60, -62, -66, -70, -74, -78, -82, -85, -88, -91, -94, -96, -97, -97,-100,-101,-102,-102,-104,-105,-100, -98,-100, -98, -95, -90, -85, -79, -73, -67, -60, -55, -55, -54, -52, -40, -34, -30, -23, -19, -15, -10,  -7,  -5,  -3,   0,   6,  10,  14,  17,  21,  24,  28,  31,  35,  42,  47,  53,  53,  56,  60,  67,  65,  66,  67,  70,  64,  45,  60,  68,  68,  67,  67,  69,  66,  66,  67,  66,  66,  65,  64,  64,  64,  64,  63,  63,  61,  60,  59,  58,  57,  53,  53,  52,  52,  50,  49,  50,  48,  45,  43,  41,  38,  36,  35,  32,  31,  29,  29,  28,  28,  25,  27,  24,  23,  21,  21,  18,  18,  16,  16,
+  /*   7.0 */  16,  15,  15,  15,  14,  11,  11,  11,  11,  11,  11,  12,  12,  13,  13,  14,  14,  14,  15,  15,  15,  15,  14,  13,  12,  11,  10,   9,   8,   7,   6,   5,   4,   3,   1,  -0,  -1,  -3,  -5,  -6,  -8, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -32, -32, -33, -33, -34, -33, -34, -33, -33, -32, -31, -30, -29, -27, -26, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -8,  -7,  -6,  -5,  -3,  -2,  -1,   0,   1,   3,   5,   6,   8,  11,  11,  12,  12,  12,  12,  14,  17,  22,  14,   4,  11,   3,  -5,  -7,  -8, -10, -12, -10, -12, -16, -21, -24, -26, -27, -29, -30, -31, -32, -33, -33, -34, -39, -40, -40, -40, -39, -38, -35, -32, -30, -28, -25, -22, -19, -16, -13, -10,  -7,  -4,  -1,   1,   3,   4,   6,   7,   9,  10,  12,  13,  14,  15,  17,  17,  18,  19,  19,  20,  21,  22,  23,  27,  31,  31,  31,  32,  31,  30,  30,  28,  28,  28,  28,  27,  26,  27,  26,  25,  24,  23,  22,  22,  22,  21,  20,  20,  19,  17,  15,  12,   8,   6,   3,  -0,  -2,  -3,  -3,  -5,  -6,  -9,  -9,  -8,  -8, -10, -11, -11, -12, -13, -12, -12, -11, -11, -11, -11, -14, -19, -23, -25, -26, -28, -31, -33, -36, -39, -44, -51, -53, -54, -56, -54, -53, -54, -56, -57, -59, -62, -66, -70, -74, -78, -82, -85, -89, -91, -94, -96, -97, -97,-100,-100,-101,-101,-103,-103, -97, -93, -95, -96, -94, -90, -85, -79, -74, -67, -60, -56, -58, -59, -50, -42, -35, -31, -25, -21, -17, -14, -12,  -9,  -5,  -2,   3,   7,  11,  15,  18,  22,  26,  31,  33,  36,  44,  48,  52,  53,  55,  59,  67,  66,  69,  71,  62,  51,  62,  67,  67,  66,  66,  67,  68,  63,  63,  61,  64,  64,  63,  63,  63,  63,  62,  61,  60,  59,  58,  58,  53,  52,  55,  52,  50,  50,  48,  46,  49,  43,  41,  39,  37,  35,  33,  32,  30,  28,  26,  27,  26,  26,  26,  23,  22,  21,  19,  18,  17,  16,  16,
+  /*   8.0 */  15,  14,  13,  13,  12,  10,  10,  10,  11,  11,  11,  12,  12,  13,  13,  13,  15,  14,  14,  13,  14,  13,  12,  11,  10,   9,   8,   7,   6,   6,   5,   4,   2,   1,  -0,  -1,  -3,  -4,  -6,  -8,  -9, -11, -13, -14, -16, -18, -19, -22, -23, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -35, -35, -35, -35, -35, -35, -34, -33, -32, -31, -29, -28, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -8,  -6,  -5,  -4,  -3,  -2,  -0,   1,   2,   4,   5,   7,   9,  11,  12,  14,  15,  15,  15,  15,  12,   9,   4,   2,   4,   0,  -5,  -9, -10, -11, -13, -14, -18, -21, -25, -27, -29, -30, -31, -33, -35, -37, -38, -37, -39, -43, -43, -42, -42, -40, -37, -35, -32, -30, -28, -25, -21, -18, -15, -12, -10,  -7,  -5,  -3,  -2,  -0,   2,   4,   6,   7,   9,  10,  12,  13,  15,  17,  19,  19,  19,  20,  21,  23,  24,  31,  33,  30,  32,  34,  35,  34,  31,  30,  29,  27,  28,  27,  26,  26,  26,  26,  26,  25,  25,  24,  24,  22,  21,  20,  19,  18,  16,  14,  12,   9,   6,   4,   2,  -1,  -1,  -2,  -3,  -5,  -5,  -6,  -7,  -7,  -9, -10, -10, -11, -12, -12, -10,  -8,  -8,  -9, -11, -12, -16, -19, -21, -22, -25, -28, -29, -31, -34, -39, -47, -52, -53, -54, -55, -52, -53, -54, -55, -58, -62, -66, -70, -74, -78, -81, -85, -88, -91, -93, -95, -96, -97, -99,-100,-100, -97, -99,-100, -96, -94, -95, -95, -92, -88, -84, -78, -73, -67, -62, -58, -58, -60, -49, -43, -36, -32, -27, -23, -19, -17, -14, -11,  -7,  -3,  -0,   4,   8,  13,  16,  20,  25,  29,  33,  36,  38,  46,  50,  52,  54,  56,  60,  67,  71,  71,  65,  55,  61,  65,  64,  64,  64,  64,  64,  63,  63,  65,  58,  63,  63,  62,  61,  62,  59,  60,  60,  59,  59,  58,  52,  50,  52,  49,  48,  49,  46,  44,  42,  41,  39,  37,  35,  33,  31,  30,  29,  28,  28,  27,  25,  26,  23,  22,  22,  20,  19,  18,  16,  16,  15,
+  /*   9.0 */  14,  13,  13,  12,  11,  10,  10,  10,  11,  11,  11,  12,  12,  13,  13,  13,  13,  14,  13,  13,  12,  12,  11,  10,   9,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -3,  -4,  -6,  -7,  -9, -11, -12, -14, -15, -17, -19, -21, -23, -25, -26, -28, -29, -31, -32, -33, -34, -35, -36, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -32, -30, -29, -27, -25, -23, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -8,  -6,  -5,  -3,  -2,  -1,   0,   1,   3,   4,   6,   6,   7,  10,  15,  13,  11,  12,  14,  10,   1,   2,  -2,  -2,  -2, -11,  -5,  -8, -12, -13, -15, -18, -23, -29, -33, -35, -34, -33, -36, -40, -40, -42, -44, -42, -44, -44, -43, -42, -41, -39, -37, -35, -33, -30, -26, -23, -20, -16, -14, -12, -10,  -8,  -6,  -4,  -3,  -1,   1,   3,   5,   7,   8,  10,  12,  13,  15,  16,  19,  20,  19,  21,  23,  25,  29,  32,  32,  30,  33,  34,  35,  34,  31,  29,  28,  27,  27,  26,  25,  24,  24,  25,  25,  24,  24,  25,  25,  23,  23,  21,  19,  19,  16,  14,  12,   9,   6,   4,   1,  -1,  -1,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -9, -10,  -8,  -4,  -7,  -7,  -7,  -8, -12, -12, -14, -17, -18, -22, -25, -27, -28, -30, -34, -42, -49, -51, -52, -53, -51, -51, -53, -55, -58, -62, -66, -70, -74, -77, -80, -84, -87, -90, -92, -94, -95, -96, -98, -99, -96, -96, -97, -97, -96, -95, -98, -95, -92, -88, -84, -78, -73, -67, -62, -61, -59, -61, -51, -44, -39, -34, -29, -25, -22, -20, -17, -13,  -9,  -6,  -3,   2,   6,  10,  13,  18,  23,  26,  31,  35,  38,  42,  49,  49,  54,  55,  53,  60,  64,  68,  68,  51,  60,  62,  62,  61,  61,  62,  61,  62,  62,  62,  59,  61,  60,  61,  60,  57,  55,  56,  56,  54,  54,  51,  56,  47,  51,  46,  43,  43,  43,  42,  40,  38,  35,  35,  34,  32,  30,  29,  30,  29,  28,  25,  28,  26,  22,  22,  20,  19,  18,  18,  16,  15,  14,
+  /*  10.0 */  13,  12,  12,  11,  10,  10,  10,  10,  11,  12,  12,  12,  12,  13,  13,  15,  13,  13,  12,  11,  10,  10,   9,   8,   7,   6,   5,   5,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -5,  -7,  -8, -10, -11, -13, -15, -17, -19, -21, -23, -24, -26, -28, -29, -31, -32, -34, -35, -36, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -36, -34, -33, -31, -29, -27, -26, -24, -22, -20, -18, -16, -15, -13, -12, -10,  -9,  -7,  -6,  -5,  -3,  -2,  -1,   0,   1,   3,   4,   4,   6,  10,  14,   9,   6,   3,   1,   1,  -2,  -4,  -3,  -5,  -4,  -1, -13, -14, -11, -13, -16, -17, -23, -28, -32, -40, -45, -43, -42, -41, -42, -44, -46, -45, -45, -45, -45, -44, -43, -41, -39, -37, -35, -32, -29, -26, -22, -19, -16, -15, -13, -11,  -9,  -7,  -5,  -3,  -1,   1,   3,   5,   6,   8,  10,  11,  13,  14,  16,  16,  17,  19,  21,  25,  29,  30,  31,  33,  32,  33,  33,  32,  32,  30,  28,  28,  27,  26,  25,  24,  23,  22,  24,  24,  23,  23,  24,  25,  24,  24,  22,  19,  18,  17,  15,  13,  10,   8,   6,   4,   2,   0,  -0,  -0,  -0,  -1,  -2,  -3,  -5,  -6,  -5,  -6,  -7,  -8,  -4,  -4,  -5,  -6,  -7,  -8, -10, -12, -13, -15, -18, -20, -23, -25, -26, -28, -32, -37, -44, -48, -50, -51, -50, -50, -51, -54, -58, -62, -66, -70, -72, -76, -79, -83, -85, -88, -91, -93, -94, -95, -97, -97, -95, -95, -95, -95, -96, -98, -97, -95, -91, -88, -84, -79, -74, -68, -63, -63, -61, -64, -53, -46, -42, -36, -32, -28, -25, -23, -19, -16, -12,  -9,  -5,  -1,   3,   8,  11,  15,  19,  24,  29,  32,  37,  40,  45,  50,  52,  56,  54,  62,  65,  65,  64,  50,  59,  60,  59,  59,  58,  58,  59,  60,  60,  60,  60,  55,  61,  56,  54,  52,  53,  55,  53,  51,  51,  46,  45,  44,  44,  42,  41,  41,  40,  39,  38,  36,  35,  36,  33,  32,  30,  28,  28,  26,  25,  26,  25,  23,  22,  21,  20,  19,  18,  16,  15,  14,  13,
+  /*  11.0 */  12,  11,  11,  11,  11,  11,  11,  10,  11,  10,  12,  12,  12,  13,  13,  13,  13,  12,  11,  10,   9,   8,   8,   6,   6,   5,   4,   3,   2,   0,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -11, -12, -15, -16, -18, -20, -22, -24, -26, -28, -29, -31, -32, -34, -35, -37, -38, -39, -40, -40, -41, -41, -41, -41, -40, -39, -38, -37, -35, -34, -32, -30, -28, -26, -24, -22, -20, -18, -16, -14, -13, -11, -10,  -9,  -7,  -6,  -5,  -3,  -2,  -0,   1,   2,   3,   1,  -1,   6,   8,   9,   6,   3,   1,  -1,  -2,  -4,  -6,  -9,  -9,   0,  -5, -13, -17, -17, -17, -22, -23, -26, -30, -30, -33, -39, -42, -46, -45, -45, -47, -47, -46, -45, -45, -45, -44, -43, -41, -39, -37, -35, -31, -27, -25, -22, -20, -18, -17, -15, -13, -11,  -8,  -6,  -4,  -2,   0,   2,   4,   7,   9,  10,  12,  14,  15,  16,  16,  17,  19,  20,  26,  28,  29,  31,  32,  35,  34,  32,  32,  31,  29,  29,  29,  28,  26,  25,  24,  23,  23,  22,  23,  22,  21,  22,  22,  22,  22,  21,  19,  18,  16,  15,  13,  11,  10,   8,   6,   4,   3,   3,   2,   2,   0,  -1,  -2,  -3,  -3,  -2,  -3,  -5,  -5,  -4,  -5,  -5,  -3,  -6,  -7,  -9, -11, -12, -13, -17, -20, -21, -24, -25, -28, -28, -33, -40, -44, -47, -48, -48, -49, -52, -54, -58, -62, -65, -68, -71, -75, -78, -81, -84, -87, -90, -91, -92, -93, -95, -94, -92, -94, -94, -93, -93, -99, -96, -93, -90, -88, -84, -79, -74, -68, -64, -63, -61, -63, -53, -48, -44, -38, -34, -30, -28, -25, -22, -18, -15, -12,  -8,  -3,   1,   6,   9,  12,  16,  20,  25,  30,  35,  39,  42,  48,  52,  54,  55,  60,  62,  65,  55,  52,  57,  58,  57,  56,  56,  56,  56,  58,  58,  58,  59,  50,  51,  43,  38,  41,  46,  51,  50,  50,  47,  46,  44,  43,  42,  41,  40,  39,  37,  39,  36,  34,  34,  33,  32,  29,  29,  27,  27,  28,  26,  23,  25,  22,  21,  20,  19,  17,  16,  15,  14,  13,  12,
+  /*  12.0 */  11,  10,  11,  11,  11,  11,  10,  11,  11,  10,  11,  12,  12,  12,  12,  12,  11,  10,  10,   9,   8,   8,   6,   5,   5,   4,   3,   2,   0,  -1,  -2,  -2,  -3,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -15, -18, -19, -21, -23, -25, -27, -29, -31, -32, -34, -35, -37, -38, -39, -40, -41, -42, -42, -42, -42, -42, -41, -40, -39, -38, -36, -35, -33, -31, -29, -27, -25, -22, -20, -18, -16, -14, -12, -10,  -9,  -8,  -7,  -6,  -5,  -3,  -2,  -1,  -0,  -2,  -3,  -2,  -0,   6,   9,   7,   6,   3,   3,   0,  -2,  -4,  -6, -10, -16, -20, -18, -16, -22, -23, -25, -26, -30, -34, -36, -32, -38, -38, -43, -49, -49, -45, -48, -47, -46, -45, -45, -44, -43, -42, -41, -38, -35, -32, -29, -26, -24, -22, -20, -19, -17, -15, -13, -11,  -9,  -6,  -4,  -2,   1,   3,   6,   8,  10,  12,  14,  15,  15,  16,  18,  19,  20,  21,  27,  28,  29,  30,  30,  33,  33,  33,  32,  31,  29,  29,  29,  28,  27,  26,  25,  24,  24,  22,  22,  20,  20,  21,  21,  22,  21,  21,  19,  17,  16,  14,  13,  12,  11,   8,   7,   5,   5,   5,   5,   4,   3,   1,  -0,  -0,  -0,  -1,  -1,  -3,  -4,  -5,  -5,  -4,  -2,  -2,  -3,  -8,  -9, -10, -12, -15, -17, -19, -21, -23, -26, -28, -30, -34, -37, -41, -43, -45, -46, -51, -54, -57, -60, -63, -67, -70, -73, -76, -79, -82, -85, -88, -89, -90, -92, -93, -91, -90, -89, -91, -91, -93, -96, -95, -92, -89, -87, -83, -79, -74, -69, -64, -63, -62, -62, -54, -49, -46, -39, -36, -32, -29, -27, -24, -20, -17, -14, -10,  -5,   1,   4,   6,   9,  13,  18,  22,  27,  31,  36,  38,  43,  49,  51,  52,  55,  58,  60,  47,  52,  55,  55,  55,  54,  54,  54,  54,  55,  56,  56,  56,  54,  53,  48,  46,  48,  38,  35,  42,  47,  47,  46,  45,  43,  41,  40,  39,  38,  36,  34,  33,  33,  32,  30,  31,  28,  27,  30,  26,  26,  23,  23,  22,  20,  19,  18,  17,  16,  14,  14,  13,  12,  11,
+  /*  13.0 */  10,  10,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  12,  12,  12,  11,  11,  10,   8,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -9, -10, -11, -13, -14, -16, -18, -20, -22, -24, -26, -28, -30, -32, -34, -35, -37, -38, -39, -41, -42, -43, -43, -43, -43, -43, -43, -42, -41, -40, -39, -37, -35, -33, -31, -30, -28, -25, -23, -20, -18, -16, -14, -12, -11,  -9,  -8,  -7,  -6,  -5,  -4,  -4,  -6,  -5,  -3,  -1,  -0,   4,   7,   7,   6,   5,   2,   0,  -2,  -4,  -6,  -8, -11, -17, -22, -24, -26, -26, -30, -35, -38, -40, -40, -37, -35, -38, -42, -39, -48, -48, -46, -47, -46, -46, -45, -44, -44, -43, -41, -40, -37, -34, -31, -27, -25, -24, -22, -20, -18, -17, -15, -13, -11,  -9,  -6,  -3,  -1,   2,   4,   7,   9,  11,  13,  14,  16,  16,  17,  19,  20,  21,  23,  29,  30,  31,  31,  31,  31,  31,  32,  33,  31,  29,  28,  28,  28,  27,  26,  26,  25,  24,  23,  22,  21,  20,  19,  20,  21,  21,  20,  19,  17,  15,  14,  13,  12,  11,  10,   8,   7,   6,   7,   7,   8,   6,   4,   2,   2,   2,   1,  -1,  -2,  -2,  -4,  -4,  -3,  -3,  -1,  -2,  -5,  -8,  -9, -11, -11, -15, -18, -19, -21, -23, -26, -28, -31, -34, -37, -40, -42, -44, -47, -52, -57, -59, -62, -65, -68, -71, -74, -77, -80, -83, -86, -87, -88, -89, -89, -91, -88, -86, -87, -89, -92, -93, -92, -90, -87, -86, -82, -78, -73, -69, -65, -62, -62, -61, -57, -50, -47, -41, -38, -34, -32, -29, -25, -22, -20, -16, -12,  -7,  -2,   1,   3,   6,  11,  15,  19,  24,  28,  32,  36,  38,  38,  47,  50,  51,  53,  46,  45,  51,  53,  53,  52,  52,  52,  52,  52,  54,  54,  55,  55,  54,  53,  52,  53,  54,  53,  46,  32,  40,  47,  46,  44,  42,  41,  39,  38,  36,  34,  35,  32,  31,  30,  30,  29,  28,  26,  26,  24,  22,  21,  20,  20,  18,  17,  16,  15,  14,  14,  13,  12,  12,  10,
+  /*  14.0 */   9,  10,  10,  10,   9,   9,   9,   9,   9,   9,  10,  11,  11,  11,  11,  10,  10,   9,   8,   7,   6,   5,   4,   3,   2,   1,  -0,  -2,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -8, -10, -11, -12, -14, -15, -17, -19, -21, -23, -25, -27, -29, -32, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -44, -44, -44, -43, -42, -41, -39, -37, -36, -34, -32, -30, -28, -25, -23, -21, -18, -16, -14, -13, -11,  -9,  -8,  -7,  -6,  -6,  -9,  -7,  -4,  -3,   0,   3,   4,   5,   6,   6,   3,   2,   1,  -1,  -3,  -6,  -8, -12, -15, -18, -21, -23, -25, -29, -33, -35, -36, -37, -37, -37, -37, -38, -41, -39, -47, -53, -49, -48, -48, -47, -46, -44, -43, -42, -41, -38, -35, -32, -29, -26, -25, -23, -21, -20, -18, -16, -14, -11,  -9,  -7,  -5,  -2,   0,   3,   6,   8,  10,  13,  15,  17,  18,  18,  19,  20,  21,  24,  26,  29,  30,  30,  31,  32,  30,  31,  31,  31,  30,  29,  29,  28,  29,  27,  25,  25,  24,  23,  23,  22,  21,  20,  19,  19,  20,  20,  20,  19,  17,  15,  14,  14,  13,  11,  10,   9,   8,   8,  10,   9,   9,   7,   5,   4,   4,   3,   2,   1,  -0,  -1,  -2,  -2,  -3,  -5,  -5,  -2,  -4,  -6,  -8, -10,  -8, -10, -14, -17, -19, -22, -24, -26, -29, -31, -34, -36, -39, -41, -45, -51, -54, -58, -60, -63, -66, -69, -72, -75, -78, -81, -83, -84, -86, -87, -86, -88, -86, -85, -87, -89, -90, -92, -91, -88, -86, -86, -80, -77, -73, -69, -65, -62, -62, -60, -59, -51, -46, -42, -38, -35, -33, -30, -27, -24, -21, -18, -14,  -9,  -4,  -2,  -0,   3,   8,  12,  17,  21,  26,  30,  34,  34,  36,  44,  48,  50,  52,  44,  46,  50,  50,  50,  50,  50,  50,  50,  51,  52,  52,  53,  53,  53,  53,  53,  53,  54,  55,  55,  43,  32,  43,  44,  43,  42,  40,  38,  37,  34,  36,  34,  31,  30,  29,  30,  27,  26,  27,  24,  24,  24,  22,  19,  18,  17,  16,  14,  14,  14,  14,  12,  11,   9,   9,
+  /*  15.0 */   9,   9,   8,   9,   8,   8,   8,   8,   8,   9,   8,  10,  10,  11,  10,  10,   9,   8,   7,   6,   5,   4,   3,   3,   2,   1,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -8,  -9, -10, -12, -13, -14, -15, -17, -18, -20, -22, -24, -26, -28, -31, -33, -35, -36, -38, -39, -40, -41, -42, -44, -44, -45, -45, -45, -45, -44, -44, -42, -41, -39, -38, -36, -34, -32, -31, -29, -26, -23, -21, -19, -17, -15, -13, -11, -10,  -9,  -9,  -9, -10,  -5,  -5,   1,   4,   2,   2,   2,   4,   4,   3,   1,  -1,  -1,  -3,  -6,  -8, -10, -14, -15, -18, -21, -21, -24, -28, -30, -32, -35, -37, -38, -40, -39, -40, -42, -40, -55, -56, -49, -50, -49, -49, -47, -44, -43, -41, -38, -36, -33, -31, -28, -26, -25, -23, -21, -19, -17, -15, -13, -10,  -8,  -5,  -3,  -0,   3,   5,   8,  10,  13,  15,  18,  20,  25,  25,  21,  22,  23,  25,  28,  30,  29,  31,  32,  33,  29,  30,  30,  30,  29,  28,  28,  28,  29,  28,  26,  24,  22,  22,  23,  22,  21,  21,  20,  19,  19,  20,  20,  19,  17,  15,  15,  14,  13,  12,  10,  10,  10,   9,  11,  11,  10,   9,   7,   7,   6,   5,   4,   3,   2,   0,   0,   0,  -1,  -3,  -3,   1,  -4,  -6,  -7,  -9,  -5,  -8, -12, -15, -16, -18, -21, -24, -27, -29, -32, -34, -37, -40, -45, -50, -54, -57, -58, -61, -64, -67, -70, -73, -76, -79, -81, -82, -84, -83, -84, -83, -84, -85, -87, -88, -87, -88, -89, -87, -84, -83, -79, -76, -72, -69, -64, -61, -60, -62, -56, -50, -47, -43, -39, -36, -34, -31, -29, -27, -24, -21, -17, -12,  -7,  -5,  -3,   2,   6,   9,  14,  18,  23,  27,  31,  32,  41,  43,  41,  42,  44,  42,  45,  47,  47,  48,  48,  48,  48,  49,  49,  50,  51,  51,  52,  52,  52,  52,  52,  54,  55,  55,  50,  37,  40,  43,  44,  42,  40,  38,  36,  35,  31,  30,  29,  29,  29,  28,  25,  26,  24,  23,  22,  19,  18,  19,  16,  15,  14,  13,  13,  12,  12,  11,  10,   9,   9,
+  /*  16.0 */   7,   7,   8,   8,   8,   8,   8,   8,   8,   9,  10,  10,  10,   9,  10,   9,   8,   8,   7,   6,   5,   4,   4,   4,   3,   1,  -0,  -2,  -3,  -4,  -5,  -6,  -7,  -8, -10, -11, -13, -14, -16, -17, -19, -21, -22, -24, -26, -27, -29, -32, -34, -35, -37, -39, -40, -41, -42, -43, -44, -45, -45, -46, -46, -45, -45, -44, -43, -42, -40, -38, -36, -34, -33, -31, -29, -26, -24, -21, -19, -17, -15, -15, -14, -12,  -8,  -3,  -3,  -8,  -6,  -2,  -2,  -3,  -2,  -1,  -3,  -2,  -0,  -1,  -2,  -2,  -4,  -5,  -7, -10, -13, -15, -17, -19, -23, -25, -27, -29, -31, -34, -37, -39, -41, -42, -42, -41, -41, -42, -61, -55, -49, -46, -46, -47, -46, -44, -42, -40, -38, -34, -32, -29, -27, -25, -24, -22, -20, -18, -16, -14, -11,  -8,  -5,  -3,  -1,   3,   5,   8,  10,  13,  15,  17,  19,  21,  23,  31,  25,  24,  25,  26,  27,  30,  30,  32,  33,  32,  28,  28,  29,  29,  28,  28,  28,  28,  29,  29,  28,  27,  24,  23,  24,  23,  21,  22,  21,  21,  21,  21,  21,  19,  17,  17,  15,  14,  13,  12,  11,  10,  11,  11,  11,  12,  11,  10,   9,   8,   7,   6,   5,   5,   3,   2,   2,   1,   0,   0,   1,  -1,  -3,  -4,  -5,  -6,  -5,  -9, -12, -15, -17, -19, -21, -23, -26, -29, -31, -33, -36, -40, -44, -47, -52, -56, -56, -59, -62, -65, -67, -70, -74, -75, -78, -80, -80, -80, -80, -80, -81, -83, -85, -85, -83, -81, -82, -84, -83, -81, -78, -75, -72, -68, -64, -61, -60, -61, -56, -51, -47, -44, -40, -37, -35, -32, -31, -30, -27, -23, -19, -14, -12,  -9,  -6,  -1,   4,   7,  13,  16,  20,  24,  29,  31,  41,  43,  38,  33,  41,  44,  45,  45,  45,  45,  46,  46,  46,  46,  47,  49,  49,  50,  51,  51,  51,  52,  52,  53,  54,  54,  53,  40,  36,  43,  42,  41,  41,  37,  35,  36,  31,  30,  29,  28,  28,  25,  24,  26,  23,  22,  20,  20,  18,  17,  16,  15,  13,  12,  12,  11,  11,  10,   9,   8,   7,
+  /*  17.0 */   7,   7,   6,   7,   7,   8,   8,   8,   9,   9,  10,  10,  10,   9,   9,   8,   8,   7,   6,   6,   6,   5,   5,   5,   4,   2,   0,  -1,  -3,  -4,  -5,  -7,  -8,  -9, -10, -12, -14, -15, -17, -19, -21, -22, -23, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -45, -45, -46, -46, -46, -46, -45, -44, -44, -42, -40, -39, -37, -35, -33, -31, -30, -27, -24, -22, -20, -20, -19, -14,  -8,  -5,  -3,  -2,  -6,  -9,  -7,  -5,  -5,  -6,  -5,  -4,  -5,  -9,  -9,  -8,  -6,  -6,  -7,  -8, -10, -12, -14, -17, -19, -21, -25, -29, -30, -33, -38, -41, -43, -44, -45, -45, -43, -42, -41, -56, -62, -53, -49, -49, -48, -47, -44, -42, -41, -39, -36, -34, -31, -28, -25, -24, -22, -21, -19, -17, -15, -13, -10,  -7,  -4,  -1,   2,   5,   8,  10,  13,  15,  16,  18,  21,  29,  25,  27,  25,  25,  26,  27,  27,  30,  32,  32,  34,  30,  27,  27,  28,  28,  28,  28,  28,  27,  28,  29,  28,  28,  27,  26,  25,  24,  22,  23,  22,  22,  22,  24,  23,  21,  20,  19,  17,  15,  14,  13,  11,  10,  11,  11,  12,  13,  12,  11,  10,  10,   8,   8,   7,   5,   4,   4,   3,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -4,  -4,  -8, -12, -16, -20, -22, -23, -24, -25, -28, -32, -34, -36, -39, -42, -44, -50, -55, -55, -56, -59, -62, -64, -69, -71, -72, -75, -77, -76, -77, -78, -77, -78, -79, -79, -80, -80, -77, -75, -78, -80, -80, -77, -73, -71, -67, -63, -61, -60, -60, -58, -51, -48, -44, -41, -38, -37, -33, -32, -30, -27, -25, -20, -17, -15, -11,  -8,  -5,   1,   4,   8,  12,  16,  21,  25,  28,  34,  43,  41,  33,  40,  43,  42,  42,  43,  43,  44,  44,  44,  44,  45,  47,  48,  49,  50,  50,  51,  51,  51,  52,  53,  52,  49,  38,  31,  40,  44,  40,  41,  37,  37,  32,  31,  30,  28,  27,  26,  24,  23,  24,  21,  20,  19,  18,  17,  16,  14,  13,  12,  11,  11,  10,   9,   9,   8,   7,   7,
+  /*  18.0 */   6,   6,   6,   7,   8,   9,   9,   8,   9,   9,   9,  10,   9,   9,   8,   8,   8,   7,   7,   7,   7,   7,   7,   6,   3,   1,  -1,  -2,  -3,  -5,  -6,  -7,  -8, -10, -11, -13, -15, -16, -18, -20, -22, -23, -25, -26, -28, -30, -32, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -46, -47, -47, -46, -46, -45, -44, -42, -41, -39, -37, -35, -33, -32, -30, -28, -25, -23, -23, -18, -14,  -9,  -7,  -6,  -4,  -6, -12, -11, -13, -11, -10,  -8,  -7,  -6,  -8, -11, -11, -12, -12, -13, -11, -12, -15, -16, -15, -15, -20, -23, -25, -28, -29, -34, -38, -41, -45, -42, -42, -45, -46, -43, -49, -62, -58, -51, -48, -47, -45, -44, -42, -41, -39, -38, -35, -33, -30, -27, -24, -23, -21, -19, -18, -16, -14, -12,  -9,  -6,  -3,  -0,   3,   6,   9,  12,  14,  16,  18,  20,  22,  24,  25,  25,  26,  27,  26,  26,  26,  28,  33,  32,  35,  31,  30,  29,  28,  28,  28,  27,  27,  27,  27,  27,  29,  29,  29,  28,  27,  26,  24,  23,  23,  23,  24,  27,  25,  23,  22,  20,  18,  16,  15,  15,  13,  12,  12,  11,  11,  12,  13,  12,  11,  11,   9,   8,   7,   6,   6,   5,   4,   4,   4,   3,   0,  -1,  -1,  -2,  -2,  -0,  -4,  -9, -14, -18, -22, -25, -27, -28, -29, -32, -34, -34, -35, -36, -40, -44, -48, -54, -53, -54, -56, -58, -62, -66, -66, -69, -72, -70, -71, -75, -74, -75, -75, -75, -75, -75, -75, -75, -72, -70, -72, -76, -74, -71, -69, -67, -63, -60, -59, -59, -55, -50, -48, -44, -42, -39, -37, -34, -32, -32, -30, -25, -21, -19, -16, -13,  -8,  -6,  -4,   1,   5,   9,  13,  18,  22,  25,  31,  39,  37,  31,  36,  38,  40,  40,  41,  41,  41,  42,  42,  43,  43,  45,  46,  47,  48,  49,  50,  50,  50,  52,  51,  50,  44,  37,  31,  39,  41,  43,  38,  36,  33,  32,  30,  28,  26,  25,  24,  22,  21,  21,  20,  19,  18,  18,  16,  14,  12,  15,  12,  11,  10,   9,   8,   7,   7,   6,   6,
+  /*  19.0 */   5,   5,   5,   5,   6,   7,   8,   9,   8,  10,   9,  10,   9,   9,   8,   8,   8,   8,   7,   8,   7,   7,   7,   6,  13,   8,  -2,  -2,  -3,  -5,  -7,  -8,  -9, -10, -12, -14, -16, -17, -19, -21, -22, -24, -25, -27, -29, -31, -33, -35, -36, -38, -39, -40, -42, -43, -44, -44, -46, -46, -47, -47, -47, -47, -46, -45, -44, -43, -41, -39, -37, -35, -34, -32, -30, -28, -28, -25, -19, -16, -13, -11,  -7,  -5,  -4,  -6, -13, -13, -14, -12, -11, -10,  -9,  -7,  -7, -12, -12, -14, -13, -14, -16, -16, -20, -22, -24, -26, -27, -27, -27, -28, -27, -29, -36, -44, -55, -62, -61, -55, -55, -61, -62, -57, -52, -48, -48, -47, -45, -43, -41, -40, -39, -37, -34, -32, -29, -25, -23, -21, -19, -17, -16, -14, -12, -10,  -8,  -5,  -2,   1,   4,   8,  11,  14,  15,  17,  18,  20,  22,  23,  24,  26,  27,  27,  26,  26,  26,  29,  33,  34,  35,  32,  31,  31,  30,  28,  28,  27,  26,  26,  26,  27,  28,  30,  31,  30,  30,  28,  26,  25,  24,  23,  25,  28,  26,  25,  23,  21,  19,  18,  18,  18,  17,  16,  13,  11,  11,  12,  13,  12,  12,  13,  11,   9,   8,   8,   7,   6,   5,   5,   5,   5,   2,   1,  -0,  -1,   1,  -0,  -5, -10, -15, -19, -23, -27, -29, -31, -32, -34, -36, -37, -36, -35, -37, -42, -43, -50, -50, -52, -54, -56, -58, -60, -63, -67, -65, -67, -69, -69, -70, -70, -71, -72, -71, -72, -72, -70, -68, -65, -67, -67, -70, -68, -67, -65, -63, -60, -60, -57, -51, -49, -48, -44, -41, -39, -38, -35, -33, -31, -29, -27, -24, -21, -18, -14, -10,  -7,  -4,   0,   4,   7,  10,  15,  19,  22,  24,  30,  33,  30,  33,  35,  37,  38,  39,  39,  40,  40,  40,  41,  42,  43,  45,  46,  47,  49,  49,  49,  49,  51,  50,  48,  42,  35,  33,  38,  38,  38,  37,  35,  33,  31,  29,  26,  25,  23,  22,  21,  20,  19,  17,  19,  15,  17,  14,  12,  11,  10,   9,   9,   7,   7,   7,   6,   6,   6,   5,
+  /*  20.0 */   4,   5,   4,   4,   4,   5,   6,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   7,   5,   6,  18,  12,  -2,  -3,  -4,  -5,  -7,  -8, -10, -11, -13, -15, -17, -18, -20, -22, -23, -24, -26, -28, -29, -31, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -48, -47, -46, -46, -44, -43, -41, -40, -38, -36, -34, -32, -30, -29, -29, -21, -16, -14, -12, -10,  -7,  -6,  -6, -10, -15, -19, -17, -16, -13, -12, -11, -10,  -9, -13, -16, -15, -17, -17, -18, -19, -19, -21, -23, -25, -26, -27, -36, -37, -41, -45, -47, -51, -59, -62, -65, -63, -59, -57, -53, -50, -47, -46, -45, -46, -45, -43, -41, -40, -38, -36, -33, -30, -27, -24, -21, -18, -17, -15, -14, -12, -10,  -8,  -6,  -4,  -1,   2,   6,   9,  13,  15,  17,  18,  19,  20,  21,  23,  23,  25,  26,  25,  25,  26,  28,  31,  33,  34,  34,  34,  33,  32,  30,  29,  27,  27,  27,  27,  27,  27,  29,  30,  31,  31,  32,  30,  28,  27,  25,  24,  25,  27,  27,  25,  23,  21,  20,  20,  22,  23,  24,  20,  14,  12,  12,  12,  13,  14,  14,  14,  12,  11,  10,   9,   9,   8,   7,   6,   7,   6,   3,   2,   2,   2,   3,  -1,  -5, -10, -15, -20, -24, -28, -31, -33, -34, -35, -36, -37, -35, -33, -35, -39, -43, -48, -49, -50, -52, -55, -56, -57, -61, -63, -61, -64, -65, -66, -66, -67, -67, -67, -68, -68, -68, -67, -65, -65, -63, -63, -64, -64, -62, -61, -60, -57, -55, -53, -50, -51, -48, -44, -42, -39, -37, -35, -34, -31, -30, -28, -25, -23, -21, -17, -13,  -9,  -6,  -2,   2,   5,   9,  13,  17,  20,  21,  22,  31,  28,  31,  33,  34,  35,  36,  37,  38,  38,  39,  40,  41,  42,  44,  45,  47,  48,  49,  49,  49,  50,  49,  47,  41,  31,  36,  41,  41,  37,  36,  33,  31,  28,  28,  27,  24,  21,  22,  21,  19,  18,  15,  14,  13,  13,  11,  10,   9,   7,   8,   6,   6,   5,   7,   5,   5,   4,   4,
+  /*  21.0 */   3,   2,   2,   2,   3,   4,   5,   6,   7,   8,   8,   9,   9,  10,   9,   9,   9,   9,   8,   7,   6,   6,  12,  15,  10,  -0,  -2,  -3,  -4,  -6,  -8,  -9, -11, -12, -14, -16, -17, -19, -20, -22, -23, -25, -27, -28, -30, -32, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -48, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -36, -34, -32, -31, -30, -28, -22, -18, -15, -13, -11, -10, -10, -13, -15, -19, -22, -21, -21, -14, -13, -14, -12, -12, -11, -18, -19, -20, -20, -22, -23, -24, -21, -23, -25, -29, -34, -42, -44, -46, -44, -48, -51, -51, -51, -52, -52, -51, -51, -51, -50, -49, -47, -45, -44, -44, -42, -41, -39, -36, -34, -31, -29, -26, -22, -19, -16, -15, -13, -12, -10,  -8,  -6,  -4,  -2,   1,   4,   7,  11,  14,  16,  17,  18,  18,  19,  20,  21,  22,  23,  24,  24,  24,  25,  28,  32,  35,  36,  35,  35,  35,  33,  32,  30,  29,  28,  27,  27,  27,  27,  29,  29,  30,  31,  32,  32,  30,  29,  28,  26,  26,  28,  27,  25,  24,  22,  21,  22,  25,  29,  30,  24,  17,  14,  13,  13,  13,  15,  15,  14,  13,  11,  10,   9,  10,   9,   9,   9,   8,   6,   4,   3,   4,   6,   4,  -0,  -4,  -8, -13, -19, -24, -28, -31, -33, -35, -35, -36, -36, -35, -34, -33, -35, -40, -43, -46, -48, -50, -55, -55, -57, -58, -57, -57, -59, -61, -62, -63, -63, -63, -63, -64, -64, -65, -65, -64, -64, -62, -60, -60, -62, -59, -58, -57, -56, -54, -52, -51, -52, -48, -43, -42, -39, -37, -36, -34, -32, -31, -29, -27, -24, -22, -19, -15, -11,  -8,  -4,  -1,   3,   8,  12,  15,  18,  19,  21,  28,  26,  29,  31,  33,  34,  35,  36,  36,  37,  38,  39,  40,  41,  42,  45,  46,  47,  48,  48,  48,  49,  48,  44,  35,  29,  38,  37,  36,  34,  33,  33,  29,  30,  26,  25,  23,  19,  19,  18,  16,  16,  14,  12,  12,  10,   9,   8,   7,   6,   5,   4,   5,   4,   5,   6,   4,   4,   3,
+  /*  22.0 */   1,   1,   1,   1,   2,   3,   4,   5,   6,   7,   8,   8,   9,   9,   9,   9,   8,   8,   7,   8,  14,  11,   7,   2,  -1,  -0,  -1,  -3,  -5,  -7,  -9, -10, -11, -13, -15, -16, -18, -20, -21, -23, -24, -25, -27, -29, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -45, -45, -46, -47, -47, -48, -47, -47, -47, -46, -45, -43, -42, -40, -38, -37, -35, -33, -31, -29, -25, -22, -18, -15, -13, -12, -12, -14, -16, -19, -24, -26, -24, -24, -18, -16, -15, -15, -14, -13, -18, -20, -19, -17, -18, -20, -21, -23, -24, -29, -32, -37, -38, -42, -43, -49, -51, -51, -51, -51, -52, -52, -52, -52, -51, -50, -50, -49, -47, -45, -44, -42, -40, -38, -36, -34, -31, -27, -24, -21, -17, -14, -13, -11, -10,  -8,  -6,  -4,  -2,   0,   3,   6,   9,  11,  14,  15,  17,  17,  17,  18,  19,  20,  22,  23,  24,  24,  24,  25,  27,  33,  36,  36,  36,  37,  37,  35,  33,  32,  30,  29,  27,  26,  25,  25,  27,  29,  30,  31,  32,  32,  31,  32,  31,  30,  30,  30,  27,  27,  25,  24,  23,  24,  26,  28,  28,  26,  20,  17,  15,  13,  13,  15,  15,  14,  13,  12,  11,  10,   9,   9,  10,  11,   8,   6,   5,   4,   6,   6,   4,   1,  -2,  -6, -10, -16, -23, -27, -31, -33, -34, -34, -34, -35, -35, -33, -32, -32, -36, -41, -42, -45, -44, -49, -52, -53, -54, -54, -54, -56, -58, -60, -60, -60, -61, -60, -59, -60, -60, -61, -62, -62, -60, -58, -58, -59, -58, -57, -57, -56, -54, -51, -51, -51, -48, -44, -42, -40, -38, -37, -34, -33, -30, -30, -29, -26, -23, -20, -17, -14, -10,  -6,  -2,   1,   5,  10,  14,  17,  19,  22,  23,  24,  27,  28,  30,  32,  34,  35,  35,  36,  37,  38,  39,  40,  41,  44,  45,  47,  48,  47,  49,  47,  43,  33,  26,  32,  37,  37,  36,  34,  32,  30,  27,  26,  23,  22,  20,  19,  17,  16,  15,  13,  11,  10,   8,   7,   7,   6,   5,   4,   3,   3,   2,   4,   2,   2,   3,   2,   1,
+  /*  23.0 */  -1,  -1,  -0,   1,   1,   2,   3,   4,   5,   6,   7,   7,   7,   6,   7,   8,  10,  11,  12,   7,   4,   4,   3,   3,   3,   2,  -0,  -3,  -6,  -8,  -9, -11, -12, -14, -16, -17, -18, -20, -21, -22, -24, -26, -27, -29, -31, -33, -34, -35, -36, -38, -40, -41, -42, -43, -45, -46, -46, -47, -47, -48, -47, -47, -46, -46, -45, -43, -42, -40, -39, -37, -33, -33, -31, -28, -25, -21, -18, -16, -14, -13, -13, -16, -18, -22, -26, -29, -27, -26, -27, -25, -20, -16, -17, -18, -19, -23, -23, -22, -22, -23, -24, -25, -24, -27, -30, -36, -39, -44, -47, -49, -50, -51, -51, -52, -52, -52, -53, -53, -52, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -29, -26, -22, -19, -16, -12, -11,  -9,  -8,  -6,  -4,  -2,  -1,   2,   4,   7,   9,  11,  13,  15,  16,  17,  17,  18,  20,  21,  22,  23,  24,  25,  26,  27,  29,  33,  36,  38,  37,  39,  38,  36,  35,  33,  31,  29,  28,  26,  25,  25,  27,  27,  30,  32,  32,  33,  33,  34,  36,  34,  33,  31,  29,  29,  27,  25,  25,  26,  27,  27,  27,  25,  22,  19,  16,  14,  14,  14,  15,  14,  13,  13,  11,  10,  10,   9,  11,  11,   8,   7,   6,   6,   7,   6,   5,   2,   0,  -3,  -8, -13, -20, -26, -30, -32, -33, -33, -33, -33, -33, -30, -28, -30, -38, -40, -43, -46, -45, -47, -47, -48, -50, -51, -52, -53, -55, -56, -57, -56, -57, -58, -59, -60, -58, -59, -60, -60, -57, -55, -56, -56, -57, -56, -56, -55, -54, -51, -51, -51, -48, -44, -43, -41, -39, -37, -35, -33, -31, -30, -29, -28, -26, -22, -19, -15, -12,  -8,  -4,  -0,   4,   8,  13,  16,  19,  26,  20,  17,  19,  22,  26,  30,  32,  34,  35,  36,  37,  38,  39,  40,  39,  42,  44,  46,  47,  48,  47,  40,  33,  27,  31,  35,  36,  35,  34,  31,  29,  31,  25,  24,  23,  21,  19,  15,  14,  13,  12,  11,   9,   8,   7,   5,   4,   3,   2,   2,   1,   1,   1,  -0,   1,   0,  -0,  -1,  -1,
+  /*  24.0 */  -2,  -2,  -1,  -0,   0,   2,   2,   3,   4,   4,   4,   6,   7,  12,  14,  10,   7,   5,   5,   4,   4,   4,   4,   3,   2,   1,  -2,  -5,  -7,  -9, -10, -11, -13, -14, -16, -17, -19, -20, -21, -22, -24, -26, -28, -29, -31, -33, -34, -36, -37, -39, -40, -41, -42, -43, -44, -45, -46, -47, -47, -47, -47, -47, -46, -45, -44, -43, -42, -41, -37, -35, -33, -33, -30, -27, -22, -19, -18, -17, -15, -14, -13, -18, -20, -23, -28, -31, -31, -28, -28, -29, -28, -24, -21, -23, -24, -26, -25, -25, -26, -26, -26, -27, -27, -32, -34, -39, -43, -45, -48, -50, -51, -52, -52, -52, -51, -52, -52, -53, -52, -51, -50, -49, -47, -46, -44, -41, -39, -36, -34, -31, -28, -25, -21, -17, -13, -11,  -9,  -7,  -5,  -3,  -2,   0,   2,   3,   5,   7,   9,  11,  14,  16,  17,  18,  19,  20,  20,  22,  23,  24,  25,  27,  28,  30,  31,  33,  35,  37,  40,  39,  38,  38,  36,  34,  33,  31,  30,  29,  27,  26,  26,  28,  29,  31,  32,  33,  34,  36,  37,  37,  35,  34,  33,  30,  28,  26,  26,  26,  27,  27,  26,  25,  22,  20,  17,  15,  14,  15,  14,  14,  13,  13,  12,  12,  11,  10,  11,  11,   9,   8,   8,   8,   8,   8,   6,   4,   2,  -2,  -5, -11, -18, -24, -28, -31, -33, -33, -33, -33, -30, -27, -30, -36, -37, -39, -42, -45, -47, -48, -45, -46, -46, -48, -48, -49, -51, -52, -53, -54, -55, -55, -56, -58, -58, -59, -59, -59, -58, -57, -56, -55, -56, -56, -55, -55, -55, -52, -51, -51, -49, -46, -43, -41, -39, -37, -36, -33, -32, -32, -31, -29, -27, -24, -20, -17, -13, -10,  -6,  -2,   2,   6,  10,  14,  17,  24,  15,  18,  21,  23,  27,  25,  29,  32,  35,  36,  37,  37,  37,  38,  39,  42,  44,  45,  46,  48,  44,  35,  29,  36,  37,  35,  34,  32,  33,  30,  28,  25,  24,  21,  20,  19,  16,  16,  13,  12,  11,   9,   7,   5,   4,   3,   2,   1,   1,  -0,  -1,  -1,  -1,  -1,  -2,  -2,  -3,  -2,  -2,
+  /*  25.0 */  -3,  -2,  -1,  -1,  -1,  -0,   1,   0,   5,   6,   7,   6,  14,   7,   3,   4,   4,   4,   4,   4,   3,   3,   2,   1,  -0,  -2,  -4,  -7,  -8, -10, -11, -12, -14, -15, -16, -17, -19, -20, -21, -23, -25, -26, -28, -30, -31, -33, -34, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -47, -47, -47, -47, -46, -45, -45, -43, -43, -41, -39, -37, -34, -35, -33, -30, -26, -22, -21, -20, -19, -16, -15, -16, -19, -23, -22, -27, -32, -32, -30, -28, -27, -27, -28, -28, -26, -24, -27, -23, -23, -24, -24, -28, -28, -32, -33, -39, -43, -44, -47, -49, -51, -52, -52, -52, -51, -51, -51, -51, -52, -52, -51, -49, -48, -47, -45, -43, -41, -38, -35, -33, -29, -26, -22, -19, -15, -11,  -8,  -7,  -4,  -2,  -0,   1,   3,   5,   6,   8,   9,  11,  13,  15,  17,  18,  19,  21,  21,  21,  22,  23,  25,  26,  28,  31,  33,  33,  31,  34,  34,  37,  39,  40,  39,  38,  36,  34,  32,  31,  30,  29,  28,  27,  27,  27,  28,  28,  30,  33,  35,  36,  36,  36,  35,  33,  30,  29,  27,  26,  25,  27,  28,  26,  25,  22,  20,  19,  17,  16,  15,  14,  13,  13,  13,  13,  13,  13,  12,  13,  12,  10,   9,  10,  10,  10,   9,   8,   5,   2,  -2,  -5, -10, -16, -22, -27, -30, -31, -32, -33, -33, -28, -27, -29, -30, -32, -32, -34, -36, -38, -42, -43, -43, -45, -46, -46, -46, -48, -49, -48, -52, -54, -54, -56, -59, -60, -60, -60, -62, -62, -62, -61, -59, -56, -55, -54, -53, -52, -51, -50, -51, -49, -45, -41, -40, -39, -37, -35, -33, -31, -32, -32, -30, -27, -25, -21, -17, -14, -11,  -7,  -4,   1,   5,   9,  12,  15,  18,  20,  22,  25,  28,  26,  25,  24,  29,  33,  36,  34,  36,  37,  37,  39,  41,  43,  44,  46,  47,  42,  33,  38,  38,  35,  34,  32,  31,  28,  27,  26,  24,  21,  19,  17,  15,  14,  13,  10,   9,   9,   7,   5,   3,   2,   1,   0,  -1,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -3,  -3,
+  /*  26.0 */  -4,  -3,  -3,  -2,  -2,  -1,   6,   2,   5,   6,   3,   5,   5,   3,   4,   4,   4,   3,   3,   2,   2,   1,  -0,  -2,  -3,  -5,  -7,  -8,  -9, -11, -12, -13, -14, -15, -17, -18, -19, -20, -22, -23, -25, -27, -28, -30, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -46, -46, -46, -46, -46, -46, -46, -45, -44, -43, -42, -41, -37, -36, -35, -35, -31, -29, -24, -21, -21, -21, -20, -18, -19, -20, -23, -25, -23, -27, -33, -31, -29, -29, -29, -27, -26, -26, -25, -26, -28, -25, -25, -24, -26, -28, -30, -33, -39, -44, -43, -45, -48, -50, -51, -53, -52, -51, -50, -50, -50, -50, -51, -51, -50, -49, -47, -46, -44, -42, -39, -37, -34, -31, -28, -24, -21, -17, -13, -10,  -6,  -4,  -2,   1,   2,   4,   6,   7,   9,  11,  12,  13,  15,  17,  19,  20,  22,  23,  24,  24,  24,  25,  26,  27,  29,  32,  34,  34,  31,  31,  34,  36,  39,  39,  40,  40,  37,  35,  33,  32,  32,  31,  30,  28,  27,  26,  26,  26,  28,  30,  32,  34,  33,  33,  32,  31,  29,  28,  27,  26,  26,  28,  30,  28,  26,  24,  22,  21,  19,  17,  15,  14,  13,  13,  12,  13,  13,  13,  13,  14,  12,  11,  13,  12,  12,  11,  10,   8,   5,   2,  -1,  -5, -10, -15, -21, -26, -28, -30, -31, -32, -33, -31, -26, -22, -24, -26, -28, -30, -31, -31, -35, -40, -42, -44, -45, -45, -45, -46, -48, -48, -49, -53, -55, -57, -59, -61, -62, -64, -66, -66, -65, -64, -62, -58, -53, -50, -49, -48, -53, -55, -52, -49, -46, -42, -39, -38, -37, -36, -33, -31, -31, -30, -28, -26, -24, -21, -19, -16, -13,  -9,  -6,  -1,   3,   7,  10,  13,  16,  19,  22,  26,  28,  29,  29,  28,  25,  28,  33,  36,  36,  36,  37,  39,  40,  42,  43,  44,  43,  39,  35,  39,  38,  36,  34,  32,  28,  27,  26,  24,  22,  19,  17,  14,  13,  11,  10,   8,   7,   6,   5,   3,   2,   1,  -0,  -2,  -3,  -3,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -4,
+  /*  27.0 */  -4,  -5,  -4,  -1,  -1,  -3,  -3,  -3,  -1,  -1,   1,   2,   2,   3,   3,   3,   2,   1,   0,   0,  -1,  -2,  -3,  -5,  -6,  -7,  -8, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -23, -24, -26, -28, -29, -31, -32, -33, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -46, -46, -46, -45, -45, -44, -43, -43, -43, -38, -37, -36, -36, -33, -31, -27, -24, -23, -22, -21, -20, -20, -21, -22, -25, -26, -25, -28, -31, -30, -29, -29, -29, -27, -26, -26, -27, -29, -27, -25, -26, -26, -27, -30, -30, -33, -38, -44, -44, -45, -48, -50, -52, -52, -52, -51, -49, -49, -49, -49, -49, -49, -49, -48, -46, -45, -43, -41, -38, -35, -33, -30, -26, -23, -19, -15, -12,  -8,  -4,  -1,   1,   3,   5,   7,   8,  10,  12,  14,  15,  17,  18,  20,  21,  23,  23,  25,  26,  26,  26,  25,  26,  28,  30,  31,  34,  34,  33,  32,  32,  36,  38,  39,  39,  40,  38,  38,  35,  33,  33,  33,  32,  30,  27,  26,  26,  25,  26,  27,  29,  30,  30,  30,  30,  29,  29,  28,  27,  27,  28,  30,  31,  30,  27,  25,  23,  22,  20,  18,  16,  15,  14,  14,  14,  13,  13,  13,  14,  13,  12,  14,  15,  14,  12,  11,  10,   7,   4,   1,  -2,  -6, -10, -15, -20, -25, -27, -29, -28, -26, -26, -30, -28, -20, -22, -24, -25, -27, -29, -31, -31, -35, -40, -45, -43, -45, -45, -44, -46, -48, -47, -50, -54, -57, -60, -63, -66, -67, -67, -67, -65, -59, -51, -47, -41, -41, -42, -42, -47, -56, -56, -51, -46, -44, -40, -36, -35, -35, -34, -32, -31, -31, -29, -27, -24, -22, -19, -18, -15, -11,  -7,  -4,   1,   5,   9,  12,  15,  17,  21,  24,  27,  30,  31,  32,  26,  24,  29,  33,  35,  35,  37,  39,  40,  42,  43,  44,  42,  46,  33,  33,  35,  34,  32,  29,  28,  25,  23,  22,  18,  16,  15,  13,  11,  10,   8,   7,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -4,
+  /*  28.0 */  -5,  -4,  -0,  -2,   1,  -4,  -5,  -3,  -2,  -1,  -0,   0,   1,   1,   0,  -0,  -1,  -2,  -2,  -3,  -3,  -5,  -6,  -7,  -8,  -9, -10, -11, -12, -13, -14, -14, -15, -16, -18, -19, -21, -22, -24, -25, -27, -28, -30, -31, -32, -34, -35, -36, -38, -39, -40, -42, -43, -44, -44, -44, -45, -45, -45, -45, -44, -44, -43, -43, -43, -37, -37, -35, -36, -34, -32, -29, -25, -24, -24, -23, -22, -21, -21, -23, -24, -26, -28, -28, -27, -28, -27, -26, -26, -25, -26, -27, -30, -31, -30, -26, -25, -26, -28, -30, -31, -34, -36, -38, -45, -45, -46, -48, -50, -52, -52, -51, -50, -48, -48, -47, -47, -47, -47, -46, -46, -44, -43, -41, -39, -36, -34, -31, -28, -25, -21, -18, -14, -10,  -6,  -2,   2,   4,   6,   8,  10,  11,  13,  15,  17,  19,  20,  21,  23,  25,  26,  26,  26,  27,  27,  27,  27,  27,  28,  30,  31,  34,  38,  45,  44,  41,  41,  39,  39,  39,  39,  39,  38,  36,  36,  36,  36,  34,  31,  30,  28,  28,  27,  27,  28,  28,  28,  28,  29,  29,  28,  28,  29,  29,  29,  30,  30,  30,  29,  26,  25,  23,  22,  21,  20,  17,  15,  15,  15,  15,  15,  14,  14,  13,  11,  13,  18,  17,  14,  12,  10,   8,   6,   3,  -0,  -3,  -7, -11, -15, -19, -23, -26, -24, -21, -19, -19, -21, -19, -18, -20, -20, -21, -25, -30, -32, -32, -32, -38, -44, -42, -45, -48, -47, -47, -46, -47, -48, -53, -56, -60, -63, -63, -58, -55, -53, -45, -33, -29, -29, -29, -30, -31, -30, -34, -41, -48, -49, -42, -40, -37, -34, -32, -33, -35, -37, -37, -35, -31, -28, -25, -23, -20, -19, -16, -12,  -9,  -5,  -1,   3,   7,  10,  13,  16,  20,  23,  26,  29,  31,  31,  29,  25,  26,  33,  35,  35,  37,  38,  40,  41,  42,  43,  40,  48,  32,  30,  32,  33,  30,  28,  24,  22,  21,  18,  17,  15,  13,  11,   9,   8,   6,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -5,  -5,
+  /*  29.0 */  -5,  -3,  -5,  -6,  -5,  -6,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -6,  -7,  -8,  -9, -10, -10, -11, -12, -12, -13, -13, -15, -16, -17, -17, -19, -20, -22, -23, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -38, -39, -41, -42, -43, -43, -44, -44, -44, -44, -44, -44, -43, -43, -42, -42, -41, -38, -35, -37, -35, -33, -31, -29, -25, -24, -25, -24, -23, -22, -22, -24, -24, -25, -27, -29, -28, -27, -27, -26, -25, -25, -25, -25, -29, -29, -27, -28, -28, -29, -29, -30, -32, -35, -37, -41, -46, -46, -47, -48, -51, -52, -52, -51, -49, -48, -47, -46, -45, -45, -44, -44, -43, -42, -40, -38, -37, -34, -32, -29, -26, -23, -19, -16, -12,  -8,  -4,  -0,   4,   7,   9,  11,  13,  15,  16,  18,  20,  22,  23,  25,  26,  27,  28,  28,  27,  28,  29,  29,  29,  29,  30,  32,  32,  34,  39,  37,  37,  36,  42,  42,  41,  41,  42,  42,  40,  40,  40,  40,  40,  38,  36,  34,  31,  29,  28,  28,  28,  27,  27,  27,  27,  28,  29,  28,  29,  30,  31,  31,  30,  29,  29,  26,  25,  23,  22,  23,  21,  20,  18,  16,  15,  16,  16,  15,  16,  14,  13,  15,  20,  17,  14,  12,  10,   8,   5,   2,  -0,  -3,  -7, -11, -15, -18, -21, -21, -15, -12, -13, -11,  -8,  -7, -11, -17, -17, -17, -22, -25, -27, -30, -30, -34, -42, -39, -45, -50, -49, -48, -47, -47, -49, -51, -55, -57, -55, -48, -40, -34, -31, -29, -30, -30, -31, -33, -34, -33, -32, -31, -30, -40, -44, -40, -37, -34, -32, -31, -32, -38, -43, -42, -39, -34, -30, -27, -24, -21, -20, -18, -13,  -9,  -6,  -2,   2,   6,   8,  12,  15,  19,  22,  24,  27,  29,  30,  30,  26,  24,  29,  33,  36,  36,  38,  39,  40,  42,  43,  36,  37,  23,  30,  32,  30,  28,  25,  23,  21,  20,  17,  16,  13,  11,  10,   9,   7,   5,   4,   3,   2,   1,  -1,  -3,  -3,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,
+  /*  30.0 */  -8,  -8,  -8,  -8,  -7,  -8,  -6,  -6,  -6,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -8,  -9, -10, -11, -11, -12, -12, -13, -13, -14, -15, -16, -17, -17, -18, -20, -21, -23, -24, -25, -27, -28, -29, -31, -32, -33, -34, -36, -37, -38, -39, -40, -41, -42, -42, -43, -43, -43, -43, -43, -43, -42, -42, -41, -40, -38, -35, -37, -35, -33, -31, -30, -28, -25, -25, -25, -24, -22, -23, -24, -24, -23, -24, -27, -28, -29, -29, -28, -28, -28, -28, -27, -28, -28, -28, -28, -29, -29, -29, -29, -30, -32, -36, -39, -41, -46, -46, -47, -49, -51, -52, -52, -51, -49, -47, -46, -45, -43, -42, -42, -41, -41, -40, -38, -36, -35, -33, -30, -28, -25, -21, -18, -14, -10,  -6,  -3,   1,   5,   9,  12,  14,  16,  18,  20,  22,  23,  25,  26,  28,  29,  30,  30,  33,  33,  30,  31,  30,  30,  31,  32,  33,  34,  35,  35,  37,  39,  40,  41,  44,  42,  40,  43,  47,  49,  48,  47,  46,  44,  41,  39,  38,  35,  33,  30,  29,  27,  26,  26,  26,  27,  27,  28,  29,  30,  31,  31,  30,  30,  29,  28,  27,  26,  24,  23,  22,  22,  21,  21,  18,  17,  17,  16,  16,  16,  17,  17,  17,  19,  17,  14,  12,  10,   7,   5,   2,  -0,  -4,  -8, -13, -15, -17, -18, -13,  -7,  -8,  -8,  -6,  -6,  -7, -13, -16, -15, -19, -22, -23, -24, -27, -28, -28, -34, -33, -39, -49, -49, -47, -46, -46, -48, -50, -48, -39, -35, -29, -25, -26, -27, -28, -30, -30, -31, -33, -34, -35, -35, -34, -35, -38, -38, -36, -35, -34, -32, -31, -32, -41, -44, -42, -41, -38, -32, -27, -24, -22, -22, -19, -15, -11,  -7,  -3,   1,   4,   7,  10,  14,  17,  21,  23,  25,  28,  30,  31,  30,  26,  27,  32,  34,  36,  37,  39,  39,  42,  42,  35,  25,  23,  30,  30,  28,  26,  23,  21,  19,  17,  16,  14,  12,  11,   9,   8,   6,   4,   3,   2,  -0,  -1,  -3,  -4,  -5,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -7,  -7,  -7,  -7,  -5,  -8,
+  /*  31.0 */  -8,  -9,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -9,  -9, -10, -11, -12, -13, -13, -13, -13, -14, -15, -15, -16, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -35, -36, -37, -38, -39, -40, -41, -41, -42, -42, -42, -42, -42, -42, -42, -41, -41, -40, -38, -34, -35, -36, -34, -32, -30, -28, -27, -26, -26, -24, -24, -23, -24, -25, -24, -24, -25, -27, -27, -28, -28, -29, -28, -28, -28, -28, -29, -29, -29, -28, -29, -29, -29, -30, -31, -34, -36, -40, -43, -44, -44, -48, -51, -52, -52, -51, -50, -48, -46, -45, -43, -42, -40, -40, -39, -39, -38, -36, -35, -33, -31, -28, -26, -23, -19, -16, -12,  -8,  -5,  -1,   3,   7,  11,  14,  18,  20,  22,  24,  25,  27,  28,  29,  30,  32,  32,  32,  34,  32,  32,  32,  31,  30,  32,  33,  35,  36,  37,  37,  38,  39,  41,  44,  44,  44,  43,  46,  51,  53,  54,  52,  50,  48,  46,  43,  42,  39,  37,  34,  32,  29,  27,  27,  27,  27,  28,  29,  31,  32,  31,  31,  30,  29,  28,  28,  27,  27,  26,  24,  23,  22,  21,  21,  19,  17,  15,  15,  16,  16,  17,  17,  18,  20,  18,  16,  14,  12,   9,   5,   2,  -1,  -6, -10, -14, -16, -16, -11,  -5,  -3,  -4,  -5,  -5,  -7,  -9, -14, -14, -15, -19, -21, -22, -23, -25, -26, -25, -26, -31, -37, -48, -47, -45, -44, -46, -48, -44, -36, -24, -22, -24, -26, -28, -29, -30, -31, -31, -33, -34, -35, -36, -36, -37, -36, -37, -38, -37, -36, -34, -32, -31, -31, -33, -41, -43, -42, -39, -35, -29, -24, -23, -22, -20, -16, -12,  -8,  -4,  -1,   3,   6,   9,  13,  16,  19,  22,  24,  27,  29,  30,  31,  29,  27,  30,  33,  36,  37,  38,  39,  42,  42,  35,  20,  24,  29,  28,  26,  24,  22,  20,  18,  16,  14,  13,  11,  10,   9,   7,   6,   4,   3,   1,  -1,  -3,  -4,  -5,  -7,  -7,  -8,  -8,  -8,  -8,  -9,  -8,  -8,  -8,  -6,  -8,  -8,  -9,  -8,
+  /*  32.0 */  -9, -10,  -9,  -9, -10, -10,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9, -10, -11, -11, -12, -13, -14, -14, -14, -14, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -30, -31, -32, -33, -34, -36, -37, -38, -39, -40, -40, -40, -41, -41, -42, -42, -42, -42, -42, -41, -41, -39, -38, -37, -33, -35, -34, -33, -31, -30, -28, -27, -26, -25, -24, -23, -26, -24, -26, -26, -27, -28, -28, -28, -27, -28, -27, -27, -27, -27, -27, -28, -29, -29, -28, -27, -28, -29, -31, -33, -34, -37, -39, -41, -43, -46, -50, -51, -51, -51, -50, -48, -47, -45, -43, -37, -40, -39, -37, -37, -37, -36, -35, -34, -31, -29, -26, -24, -21, -18, -14, -10,  -7,  -3,   1,   4,   8,  12,  16,  20,  23,  25,  27,  28,  30,  31,  33,  34,  35,  36,  36,  36,  38,  34,  34,  33,  33,  33,  34,  36,  38,  39,  40,  41,  40,  40,  42,  43,  43,  44,  46,  48,  49,  50,  55,  54,  51,  48,  47,  44,  41,  39,  38,  36,  32,  30,  28,  28,  29,  30,  32,  33,  32,  33,  32,  30,  29,  27,  27,  27,  29,  30,  27,  25,  22,  18,  14,  11,  11,  12,  16,  19,  17,  17,  16,  20,  21,  20,  19,  18,  15,  11,   7,   2,  -2,  -7, -10, -12, -14, -12,  -4,  -1,  -1,  -2,  -3,  -5,  -6, -10, -12, -12, -14, -18, -21, -22, -24, -24, -25, -25, -26, -31, -40, -45, -43, -43, -44, -46, -46, -35, -28, -25, -24, -26, -28, -29, -30, -31, -32, -33, -35, -37, -37, -37, -37, -38, -38, -39, -39, -39, -37, -34, -34, -32, -32, -31, -35, -41, -41, -38, -34, -29, -26, -24, -24, -21, -17, -13,  -9,  -6,  -2,   2,   5,   9,  12,  15,  18,  21,  24,  26,  29,  30,  32,  31,  26,  31,  33,  33,  36,  37,  39,  42,  42,  33,  16,  25,  29,  28,  26,  24,  22,  20,  17,  16,  13,  12,  11,   9,   8,   7,   6,   4,   1,  -1,  -3,  -4,  -6,  -7,  -8,  -8,  -9,  -8,  -8,  -9,  -8,  -5,  -9,  -9,  -9,  -9,  -9,  -9,  -9,
+  /*  33.0 */  -9, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -12, -13, -13, -14, -14, -15, -15, -15, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -27, -28, -29, -29, -30, -32, -33, -34, -35, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -42, -41, -41, -41, -40, -38, -38, -37, -33, -34, -34, -33, -32, -31, -29, -28, -26, -24, -24, -22, -22, -24, -22, -25, -27, -30, -30, -30, -28, -27, -28, -28, -27, -27, -27, -28, -29, -30, -30, -30, -30, -29, -29, -31, -33, -34, -36, -39, -40, -44, -48, -50, -51, -51, -50, -49, -47, -46, -44, -42, -40, -38, -38, -36, -35, -35, -34, -32, -31, -29, -27, -25, -22, -18, -16, -12,  -9,  -5,  -1,   3,   6,  10,  14,  17,  21,  25,  28,  30,  32,  33,  34,  36,  37,  38,  39,  39,  40,  38,  38,  38,  37,  35,  35,  35,  36,  40,  43,  45,  48,  45,  43,  41,  42,  42,  41,  39,  46,  48,  51,  52,  55,  52,  52,  50,  48,  45,  42,  40,  39,  36,  32,  30,  29,  29,  31,  33,  33,  33,  32,  31,  30,  29,  28,  27,  27,  28,  28,  29,  23,  14,  10,   7,   7,   7,   9,  12,  14,  15,  16,  16,  20,  24,  24,  21,  19,  17,  13,   8,   3,  -1,  -4,  -5,  -3,  -3,  -0,   4,   3,   1,  -1,  -4,  -5,  -8, -10, -12, -12, -14, -19, -21, -21, -21, -23, -24, -23, -26, -29, -37, -45, -47, -47, -45, -40, -34, -27, -23, -24, -25, -27, -29, -30, -31, -32, -33, -34, -36, -37, -38, -38, -38, -39, -39, -40, -40, -40, -37, -36, -35, -34, -34, -33, -34, -38, -39, -36, -34, -31, -28, -26, -23, -21, -18, -15, -11,  -6,  -2,   1,   5,   8,  11,  15,  18,  21,  24,  26,  28,  31,  32,  33,  31,  34,  35,  34,  34,  36,  37,  41,  43,  34,  15,  24,  28,  27,  25,  23,  21,  18,  16,  14,  13,  10,   9,   7,   6,   5,   5,   3,   0,  -2,  -4,  -6,  -7,  -8,  -9,  -9,  -9,  -9, -10, -10,  -7,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,
+  /*  34.0 */ -10, -10,  -9, -10, -10, -11, -12, -12, -12, -12, -13, -13, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -29, -31, -32, -32, -34, -35, -36, -37, -38, -39, -40, -40, -41, -41, -41, -41, -41, -41, -41, -41, -40, -39, -37, -37, -34, -32, -32, -33, -31, -30, -29, -26, -24, -23, -22, -23, -21, -23, -24, -24, -26, -28, -29, -30, -27, -27, -29, -30, -29, -28, -27, -28, -27, -28, -28, -29, -30, -30, -31, -31, -31, -32, -34, -36, -39, -40, -41, -47, -48, -48, -49, -48, -47, -46, -45, -43, -42, -40, -38, -37, -35, -34, -33, -32, -30, -29, -28, -25, -22, -20, -16, -13, -10,  -6,  -3,   1,   4,   8,  11,  15,  18,  22,  26,  29,  32,  35,  36,  38,  39,  40,  41,  41,  42,  42,  42,  42,  40,  38,  38,  38,  38,  38,  40,  42,  43,  44,  46,  45,  43,  42,  41,  40,  37,  38,  43,  45,  46,  48,  52,  51,  51,  50,  48,  46,  45,  42,  39,  34,  31,  29,  30,  32,  33,  34,  33,  33,  32,  32,  31,  29,  28,  26,  25,  23,  19,  13,   9,   9,   6,   1,   1,   5,   8,  10,  13,  14,  15,  18,  28,  26,  22,  20,  18,  14,  10,   6,   1,   0,   4,   5,   5,   6,   6,   4,  -1,  -3,  -5,  -7, -10, -11, -12, -14, -17, -20, -21, -20, -20, -21, -22, -22, -23, -28, -35, -42, -48, -44, -38, -32, -25, -25, -23, -24, -25, -26, -28, -30, -32, -34, -34, -36, -37, -38, -39, -39, -40, -41, -41, -41, -41, -40, -39, -38, -36, -36, -36, -36, -36, -38, -38, -36, -35, -33, -28, -25, -23, -21, -19, -15, -11,  -7,  -3,   1,   5,   8,  11,  14,  18,  21,  24,  26,  28,  30,  31,  32,  32,  34,  37,  37,  40,  36,  37,  40,  39,  25,  11,  23,  27,  25,  24,  21,  19,  17,  16,  14,  11,   9,   7,   5,   4,   4,   3,   2,  -0,  -2,  -4,  -6,  -8,  -8,  -9, -10,  -9, -10, -12, -12,  -9, -11,  -9,  -8,  -9,  -9,  -9,  -8, -10,
+  /*  35.0 */ -10, -10, -10, -10, -10, -12, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -18, -19, -20, -21, -22, -23, -23, -24, -26, -27, -28, -29, -30, -32, -33, -33, -34, -35, -36, -38, -39, -39, -40, -40, -40, -41, -41, -41, -41, -41, -40, -39, -39, -36, -34, -33, -32, -32, -31, -30, -29, -27, -25, -24, -24, -23, -21, -22, -20, -22, -24, -25, -27, -28, -28, -27, -28, -27, -30, -32, -32, -30, -28, -28, -28, -29, -28, -29, -30, -31, -30, -31, -33, -32, -32, -35, -37, -39, -40, -43, -45, -47, -46, -46, -45, -45, -44, -42, -40, -39, -37, -36, -34, -33, -31, -30, -29, -27, -26, -23, -20, -18, -15, -11,  -8,  -4,  -1,   2,   6,   9,  13,  16,  20,  23,  27,  30,  34,  37,  39,  41,  42,  43,  44,  45,  44,  45,  46,  44,  43,  43,  42,  41,  41,  40,  41,  42,  44,  47,  48,  46,  46,  48,  47,  44,  43,  41,  41,  40,  40,  44,  48,  50,  50,  50,  50,  49,  47,  44,  42,  37,  36,  37,  38,  37,  37,  36,  36,  36,  34,  34,  33,  29,  28,  26,  23,  17,  12,   9,  17,  20,  17,  10,   6,   6,   7,   7,  17,  28,  24,  19,  24,  26,  25,  22,  20,  17,  13,  10,   6,   6,   9,  11,  11,   9,   6,   1,  -2,  -5,  -7,  -9, -11, -12, -14, -16, -17, -21, -22, -23, -22, -22, -22, -23, -25, -29, -32, -35, -37, -35, -32, -28, -27, -23, -22, -22, -25, -26, -29, -32, -33, -35, -36, -37, -38, -39, -40, -41, -42, -43, -43, -42, -42, -42, -41, -40, -40, -39, -38, -38, -39, -39, -38, -36, -35, -34, -32, -27, -22, -21, -19, -16, -11,  -7,  -2,   2,   4,   7,  11,  14,  17,  20,  22,  25,  28,  29,  30,  31,  33,  35,  36,  36,  37,  37,  41,  39,  34,  23,  13,  20,  24,  23,  22,  21,  19,  17,  15,  12,  10,   8,   6,   5,   4,   3,   1,  -1,  -2,  -3,  -5,  -6,  -8,  -9, -10, -10, -10, -10, -12,  -9,  -4, -13, -10, -10, -10, -10,  -9, -10, -10,
+  /*  36.0 */ -11, -11, -11, -12, -12, -12, -13, -13, -13, -14, -14, -14, -14, -14, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -32, -33, -34, -35, -36, -37, -37, -39, -39, -39, -40, -40, -40, -40, -40, -40, -40, -39, -38, -36, -33, -34, -32, -29, -30, -29, -29, -27, -25, -23, -23, -21, -20, -21, -20, -19, -19, -21, -24, -27, -28, -29, -29, -28, -29, -30, -30, -29, -29, -29, -29, -29, -29, -29, -30, -30, -30, -32, -32, -32, -34, -33, -32, -36, -37, -40, -40, -43, -44, -44, -44, -43, -43, -42, -41, -39, -38, -37, -35, -33, -31, -30, -29, -27, -26, -23, -21, -18, -16, -11,  -9,  -5,  -3,   0,   4,   7,  11,  14,  18,  22,  25,  28,  31,  34,  38,  41,  43,  46,  47,  47,  48,  48,  48,  49,  48,  48,  48,  47,  45,  44,  43,  41,  42,  43,  45,  47,  49,  46,  46,  47,  44,  43,  45,  45,  42,  42,  42,  46,  48,  48,  47,  47,  48,  48,  46,  44,  43,  43,  43,  43,  42,  40,  39,  39,  38,  37,  38,  31,  29,  29,  27,  21,  14,  11,  19,  28,  31,  29,  25,  16,  12,  15,  15,  21,  27,  25,  23,  25,  27,  26,  24,  22,  20,  16,  14,  13,  13,  15,  15,  12,  10,   5,   5,   1,  -2,  -4,  -8, -10, -12, -13, -15, -18, -23, -27, -28, -29, -30, -30, -31, -32, -35, -29, -28, -30, -30, -31, -30, -26, -21, -24, -25, -30, -33, -33, -32, -34, -36, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -47, -48, -47, -44, -46, -44, -43, -43, -42, -40, -37, -36, -34, -31, -29, -26, -22, -17, -17, -15, -12,  -7,  -2,   2,   4,   8,  10,  13,  16,  19,  22,  24,  27,  30,  28,  28,  30,  33,  33,  34,  36,  40,  42,  41,  38,  31,  19,  16,  22,  22,  22,  21,  19,  16,  14,  12,  10,   8,   6,   5,   3,   2,   2,   0,  -2,  -4,  -5,  -6,  -7,  -8,  -9, -10, -10, -10, -12, -11, -11, -12, -11, -11, -11, -11, -10, -11, -11,
+  /*  37.0 */ -12, -12, -12, -13, -12, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, -14, -14, -15, -15, -15, -16, -16, -17, -18, -18, -20, -20, -21, -22, -23, -24, -25, -26, -27, -29, -30, -31, -33, -34, -35, -36, -37, -37, -37, -38, -39, -39, -39, -40, -40, -40, -40, -39, -39, -38, -37, -33, -33, -32, -27, -27, -28, -27, -27, -26, -23, -23, -23, -22, -21, -21, -19, -17, -17, -20, -23, -26, -28, -28, -29, -29, -30, -30, -31, -30, -30, -30, -31, -30, -29, -30, -31, -32, -32, -31, -32, -32, -32, -33, -33, -34, -36, -39, -39, -42, -43, -43, -43, -42, -42, -42, -40, -39, -37, -35, -34, -32, -31, -28, -28, -25, -24, -22, -19, -16, -13, -10,  -7,  -4,  -1,   2,   5,   9,  12,  16,  19,  23,  26,  29,  33,  36,  38,  42,  45,  47,  49,  51,  51,  51,  51,  52,  52,  52,  52,  49,  49,  49,  48,  47,  46,  46,  47,  47,  51,  52,  48,  46,  51,  49,  52,  52,  50,  47,  47,  48,  51,  50,  47,  46,  45,  44,  45,  45,  43,  43,  43,  43,  43,  42,  42,  42,  40,  38,  41,  31,  29,  28,  27,  23,  21,  25,  31,  36,  38,  37,  34,  30,  28,  29,  29,  33,  33,  32,  29,  30,  30,  27,  25,  23,  22,  19,  18,  19,  20,  17,  16,  12,   8,   5,  -3,  -7,  -9, -10, -10, -10, -11, -14, -17, -23, -28, -31, -33, -35, -37, -38, -41, -44, -45, -39, -33, -30, -29, -29, -31, -28, -28, -34, -42, -48, -51, -51, -51, -46, -42, -39, -42, -42, -44, -46, -46, -50, -56, -58, -57, -55, -54, -50, -47, -46, -44, -43, -43, -44, -42, -40, -37, -34, -31, -30, -25, -21, -16, -16, -16, -12,  -8,  -3,   0,   4,   7,  10,  13,  16,  19,  21,  23,  26,  29,  27,  28,  29,  31,  32,  33,  35,  37,  40,  42,  43,  39,  28,  16,  18,  22,  22,  20,  18,  16,  14,  11,  10,   8,   6,   4,   2,   1,   1,  -0,  -2,  -4,  -5,  -6,  -7,  -8,  -9,  -9, -10, -11, -13, -12, -13, -13, -12, -11, -11, -11, -11, -12, -12,
+  /*  38.0 */ -13, -12, -13, -13, -13, -13, -13, -13, -13, -12, -12, -12, -12, -12, -12, -12, -12, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -20, -21, -22, -22, -24, -25, -26, -27, -29, -30, -31, -33, -33, -35, -35, -36, -36, -37, -37, -38, -38, -39, -39, -39, -39, -39, -38, -37, -37, -33, -32, -31, -26, -24, -25, -25, -25, -24, -23, -21, -19, -21, -20, -19, -17, -15, -16, -17, -21, -23, -25, -26, -27, -27, -29, -30, -32, -32, -33, -32, -32, -31, -30, -30, -31, -32, -34, -35, -34, -34, -33, -32, -32, -33, -34, -35, -37, -37, -39, -42, -42, -41, -41, -41, -41, -40, -38, -36, -34, -32, -30, -28, -28, -27, -24, -22, -20, -18, -15, -11,  -8,  -5,  -2,   1,   4,   7,   9,  13,  16,  20,  23,  27,  31,  34,  37,  39,  42,  45,  48,  51,  53,  54,  55,  56,  55,  55,  55,  55,  53,  52,  51,  50,  49,  48,  49,  47,  48,  49,  50,  48,  45,  44,  49,  53,  55,  55,  55,  52,  51,  51,  52,  50,  49,  47,  46,  45,  44,  44,  43,  42,  42,  43,  44,  43,  43,  44,  42,  42,  38,  31,  29,  25,  23,  25,  29,  36,  39,  39,  39,  38,  36,  36,  37,  37,  37,  36,  35,  36,  35,  34,  31,  28,  26,  23,  23,  24,  24,  20,  18,  16,  13,   5,  -8, -12, -12, -13, -16, -17, -16, -15, -19, -26, -29, -31, -33, -35, -36, -38, -38, -39, -43, -44, -41, -33, -30, -28, -28, -30, -33, -46, -52, -53, -54, -54, -55, -56, -56, -56, -55, -49, -45, -44, -48, -54, -59, -60, -58, -53, -48, -47, -47, -45, -44, -45, -46, -49, -47, -45, -42, -39, -36, -32, -30, -25, -20, -17, -16, -15, -13,  -9,  -5,  -1,   3,   7,  10,  13,  15,  18,  20,  23,  26,  26,  26,  27,  28,  29,  31,  31,  32,  36,  36,  38,  42,  41,  35,  24,  17,  21,  22,  21,  19,  16,  13,  12,  10,   8,   6,   4,   3,   1,  -0,  -2,  -3,  -4,  -4,  -5,  -7,  -9,  -9, -10, -11, -12, -10,  -8, -14, -13, -12, -11, -11, -11, -12, -13, -13,
+  /*  39.0 */ -13, -12, -13, -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -12, -12, -12, -12, -13, -13, -13, -14, -14, -15, -15, -16, -17, -17, -18, -19, -21, -22, -22, -23, -24, -26, -27, -28, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -37, -37, -37, -37, -37, -37, -37, -36, -36, -34, -30, -30, -27, -24, -25, -24, -22, -22, -21, -21, -20, -18, -18, -20, -18, -17, -14, -14, -16, -20, -22, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -32, -32, -32, -33, -35, -35, -35, -34, -35, -34, -32, -33, -34, -33, -35, -36, -37, -37, -39, -40, -39, -38, -38, -38, -37, -36, -33, -32, -31, -27, -27, -25, -24, -22, -19, -16, -13, -10,  -7,  -3,  -0,   2,   5,   8,  11,  14,  17,  20,  24,  27,  30,  33,  36,  39,  43,  45,  49,  52,  54,  56,  57,  58,  58,  58,  57,  56,  55,  54,  52,  51,  51,  49,  49,  49,  48,  49,  50,  51,  49,  49,  53,  54,  55,  55,  54,  54,  54,  53,  53,  52,  50,  49,  49,  47,  46,  45,  44,  44,  45,  46,  44,  43,  43,  43,  43,  43,  44,  37,  30,  29,  27,  28,  33,  38,  40,  40,  40,  40,  39,  40,  40,  39,  37,  37,  36,  36,  36,  34,  31,  30,  29,  28,  27,  26,  24,  21,  18,  14,  11,  -0, -12, -17, -17, -18, -21, -20, -19, -21, -24, -27, -29, -31, -33, -34, -36, -37, -38, -36, -35, -36, -36, -35, -33, -30, -30, -36, -47, -51, -52, -51, -51, -54, -57, -59, -60, -62, -63, -63, -63, -58, -55, -55, -56, -56, -52, -51, -49, -47, -46, -48, -52, -52, -52, -51, -48, -45, -42, -39, -36, -32, -28, -25, -19, -16, -14, -13, -12,  -9,  -5,  -1,   2,   6,  10,  13,  15,  17,  20,  23,  24,  23,  25,  25,  26,  28,  30,  31,  31,  33,  35,  37,  39,  41,  38,  25,  15,  20,  22,  21,  20,  18,  16,  13,  11,   9,   7,   5,   4,   2,   0,  -1,  -3,  -4,  -5,  -6,  -7,  -9,  -9, -10, -11, -13, -15, -13, -14, -13, -12, -12, -12, -12, -13, -13, -13,
+  /*  40.0 */ -13, -13, -12, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11, -11, -11, -11, -12, -12, -13, -13, -13, -13, -14, -15, -16, -16, -17, -18, -20, -21, -22, -22, -24, -25, -26, -28, -28, -30, -30, -31, -32, -33, -34, -34, -35, -35, -36, -36, -36, -37, -37, -36, -36, -35, -34, -31, -28, -28, -23, -23, -23, -23, -21, -20, -19, -19, -19, -18, -16, -18, -17, -16, -13, -12, -17, -19, -21, -23, -24, -25, -26, -27, -28, -30, -32, -33, -33, -33, -33, -33, -33, -33, -34, -35, -34, -34, -34, -35, -35, -34, -33, -35, -35, -35, -34, -34, -35, -35, -35, -35, -34, -34, -34, -34, -34, -33, -31, -30, -29, -27, -25, -23, -21, -18, -15, -12,  -9,  -6,  -2,   1,   4,   7,  10,  13,  16,  19,  23,  26,  29,  32,  35,  38,  41,  43,  46,  49,  52,  55,  57,  59,  59,  59,  60,  59,  58,  57,  56,  54,  54,  52,  51,  52,  51,  49,  48,  47,  46,  46,  46,  49,  54,  56,  55,  55,  54,  52,  52,  53,  52,  51,  50,  48,  49,  48,  45,  45,  44,  46,  48,  46,  44,  44,  44,  45,  46,  45,  38,  39,  34,  34,  36,  40,  40,  41,  40,  40,  40,  39,  38,  39,  39,  38,  37,  35,  34,  32,  30,  29,  30,  29,  29,  27,  26,  22,  20,  19,  11,   3,  -8, -16, -21, -18, -15, -16, -15, -18, -21, -24, -26, -28, -30, -33, -34, -35, -36, -37, -38, -39, -41, -41, -42, -40, -39, -35, -35, -41, -45, -46, -50, -56, -60, -62, -62, -64, -66, -67, -67, -66, -66, -67, -66, -64, -63, -62, -59, -56, -55, -57, -57, -55, -54, -53, -50, -47, -45, -43, -40, -36, -32, -29, -25, -20, -16, -13, -11, -10,  -8,  -4,  -1,   3,   5,   8,  11,  14,  17,  20,  24,  24,  23,  23,  24,  25,  26,  29,  30,  31,  31,  33,  34,  38,  40,  37,  24,  15,  17,  21,  21,  20,  18,  17,  15,  12,  10,   8,   6,   5,   3,   1,  -0,  -2,  -3,  -4,  -6,  -7,  -8,  -9, -10, -11, -13, -11, -15, -13, -12, -11, -12, -12, -13, -13, -12, -13,
+  /*  41.0 */ -12, -12, -12, -12, -12, -11, -11, -11, -11, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -12, -12, -12, -13, -14, -15, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -31, -32, -33, -33, -33, -33, -33, -32, -32, -32, -32, -32, -33, -30, -25, -25, -23, -22, -21, -20, -19, -18, -17, -17, -17, -17, -14, -13, -14, -16, -12, -11, -15, -18, -20, -21, -22, -23, -24, -26, -27, -28, -30, -32, -32, -33, -33, -33, -33, -33, -34, -35, -34, -36, -35, -34, -34, -35, -33, -34, -34, -33, -34, -32, -31, -32, -32, -31, -31, -29, -28, -30, -31, -30, -29, -28, -27, -26, -24, -21, -19, -16, -13, -10,  -7,  -4,  -1,   3,   7,   9,  12,  16,  19,  21,  24,  27,  30,  34,  37,  40,  42,  45,  47,  50,  53,  55,  58,  59,  61,  61,  60,  60,  59,  58,  57,  56,  56,  54,  52,  52,  51,  51,  50,  49,  48,  48,  48,  49,  55,  56,  56,  56,  55,  54,  54,  53,  51,  50,  50,  49,  48,  46,  46,  45,  45,  46,  48,  47,  46,  46,  47,  48,  48,  48,  46,  40,  35,  37,  43,  44,  43,  42,  41,  41,  39,  38,  37,  36,  36,  36,  35,  34,  31,  28,  26,  25,  24,  24,  24,  25,  26,  23,  18,  11,   5,   5,  -6, -16, -16, -11, -12, -13, -14, -17, -21, -25, -27, -28, -30, -32, -33, -34, -36, -37, -40, -42, -44, -41, -45, -49, -44, -38, -34, -34, -33, -35, -44, -54, -59, -61, -63, -65, -66, -65, -64, -62, -62, -62, -64, -63, -61, -61, -60, -58, -56, -56, -56, -56, -55, -53, -50, -48, -46, -42, -40, -38, -33, -28, -24, -21, -17, -14, -11,  -8,  -7,  -3,   1,   3,   5,   7,  10,  14,  18,  21,  24,  26,  27,  24,  23,  24,  25,  26,  27,  28,  30,  30,  32,  35,  36,  29,  17,  11,  10,  16,  19,  19,  18,  17,  16,  14,  12,  10,   7,   6,   4,   2,   1,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -11, -12,  -7,  -8, -13, -11, -11, -12, -12, -12, -12, -12, -12,
+  /*  42.0 */ -11, -11, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -9,  -9, -10, -10, -10, -10, -11, -11, -12, -13, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -31, -31, -32, -32, -32, -31, -31, -31, -31, -30, -30, -30, -27, -24, -23, -21, -20, -19, -18, -17, -16, -15, -15, -15, -15, -14, -14, -14, -14, -13, -12, -14, -18, -19, -19, -21, -22, -24, -25, -25, -28, -29, -28, -32, -32, -33, -33, -34, -34, -34, -34, -34, -35, -36, -36, -35, -35, -33, -32, -33, -33, -31, -32, -30, -30, -29, -28, -28, -27, -26, -25, -27, -26, -26, -26, -26, -24, -23, -20, -17, -13, -10,  -8,  -6,  -1,   4,   5,   9,  12,  15,  18,  21,  24,  26,  29,  32,  35,  38,  42,  44,  46,  48,  51,  53,  56,  58,  60,  62,  61,  61,  61,  60,  60,  59,  58,  57,  57,  55,  54,  54,  53,  51,  51,  50,  51,  52,  53,  56,  56,  57,  57,  54,  54,  54,  52,  50,  50,  50,  51,  50,  47,  47,  46,  46,  46,  51,  47,  48,  48,  49,  48,  46,  47,  44,  39,  37,  41,  45,  44,  45,  43,  41,  40,  40,  38,  34,  30,  28,  27,  28,  29,  27,  25,  22,  20,  19,  19,  18,  20,  20,  19,  14,  12,   9,  -1,  -8, -11, -12, -11, -12, -14, -17, -20, -23, -25, -27, -28, -29, -31, -33, -34, -35, -39, -41, -43, -43, -40, -36, -38, -37, -36, -35, -37, -38, -38, -38, -39, -44, -52, -56, -56, -57, -60, -63, -62, -64, -63, -62, -63, -63, -63, -61, -58, -56, -56, -56, -55, -54, -53, -50, -48, -46, -43, -40, -36, -33, -29, -26, -23, -19, -16, -11,  -7,  -5,  -2,   0,   2,   4,   6,   8,  13,  18,  21,  23,  25,  26,  25,  23,  23,  24,  25,  26,  27,  28,  29,  30,  35,  33,  22,  21,  15,  11,   9,  10,  14,  16,  17,  16,  15,  13,  11,   9,   7,   5,   3,   2,  -0,  -1,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -12, -10, -11, -13, -11, -11, -11, -12, -12, -11, -11, -11,
+  /*  43.0 */ -10, -10,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -9,  -9, -10, -11, -11, -12, -12, -13, -14, -16, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -26, -27, -28, -29, -30, -30, -30, -30, -31, -30, -30, -30, -29, -29, -29, -29, -24, -23, -21, -20, -19, -18, -18, -16, -16, -15, -14, -13, -12, -11, -10, -10, -14, -12, -14, -15, -15, -18, -19, -21, -24, -26, -27, -26, -27, -29, -29, -30, -31, -32, -34, -35, -35, -35, -34, -34, -34, -35, -36, -36, -37, -36, -35, -35, -34, -32, -32, -29, -28, -27, -27, -27, -26, -24, -25, -23, -22, -22, -21, -21, -20, -20, -18, -14, -10,  -8,  -7,  -2,   4,  10,  13,  16,  17,  19,  20,  23,  26,  29,  31,  34,  37,  40,  43,  45,  47,  50,  52,  54,  56,  59,  61,  62,  62,  62,  62,  62,  62,  62,  61,  60,  58,  58,  58,  57,  56,  53,  51,  52,  55,  53,  54,  55,  57,  56,  56,  55,  54,  51,  50,  51,  52,  52,  51,  50,  50,  49,  48,  46,  46,  47,  49,  49,  48,  47,  43,  43,  43,  43,  43,  44,  46,  45,  44,  44,  42,  41,  40,  38,  36,  31,  29,  28,  26,  23,  21,  20,  19,  20,  18,  15,  17,  22,  23,  22,  17,  12,   5,  -1,  -6,  -8,  -9, -10, -12, -14, -17, -19, -20, -23, -25, -27, -28, -29, -32, -32, -34, -37, -39, -41, -42, -42, -40, -41, -41, -42, -44, -43, -42, -41, -42, -44, -47, -46, -48, -49, -51, -48, -49, -53, -62, -65, -63, -64, -64, -62, -57, -57, -60, -57, -56, -55, -53, -52, -50, -49, -46, -44, -43, -40, -38, -34, -31, -28, -25, -22, -18, -13,  -8,  -4,  -2,  -1,   1,   3,   5,   8,  11,  15,  19,  21,  22,  24,  25,  25,  26,  26,  27,  26,  26,  27,  28,  29,  32,  33,  30,  31,  28,  28,  21,  11,   3,   6,  12,  15,  14,  14,  12,  11,   9,   7,   5,   3,   1,   0,  -2,  -3,  -5,  -5,  -6,  -7,  -8, -11,  -8, -10, -11,  -9, -10, -11, -11, -10, -10, -10, -10,
+  /*  44.0 */  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -9,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -29, -29, -29, -29, -28, -28, -28, -29, -28, -23, -22, -21, -19, -18, -18, -17, -17, -15, -13, -11, -11, -11,  -9,  -8, -10, -13, -10, -15, -15, -13, -17, -20, -23, -25, -25, -26, -26, -27, -28, -29, -29, -31, -33, -36, -37, -36, -36, -34, -34, -36, -35, -36, -36, -37, -37, -37, -36, -34, -31, -29, -29, -28, -27, -27, -26, -24, -24, -23, -23, -23, -21, -19, -18, -15, -13, -12, -11,  -9,  -7,  -3,   3,   8,  12,  16,  17,  18,  20,  23,  25,  28,  30,  33,  35,  38,  40,  44,  46,  48,  51,  53,  55,  57,  59,  61,  63,  64,  64,  64,  64,  63,  63,  63,  61,  60,  58,  58,  58,  56,  55,  55,  53,  50,  47,  47,  51,  51,  49,  48,  50,  46,  47,  49,  49,  49,  49,  51,  52,  51,  50,  51,  52,  49,  46,  46,  45,  42,  41,  42,  43,  44,  46,  47,  46,  45,  44,  43,  40,  40,  39,  37,  36,  35,  33,  32,  29,  25,  22,  20,  17,  17,  15,  13,  16,  21,  20,  18,  14,   7,   2,  -2,  -5,  -7,  -9, -11, -12, -13, -15, -16, -18, -20, -23, -25, -27, -29, -30, -32, -34, -36, -37, -38, -39, -38, -39, -41, -42, -44, -44, -45, -45, -46, -47, -47, -49, -49, -51, -51, -52, -52, -56, -61, -66, -64, -60, -61, -60, -58, -59, -60, -62, -58, -56, -54, -53, -52, -51, -49, -47, -46, -44, -42, -40, -37, -35, -32, -28, -25, -22, -18, -14, -10,  -6,  -4,  -2,   0,   2,   4,   7,   9,  13,  16,  19,  20,  22,  25,  25,  24,  25,  25,  27,  27,  26,  27,  28,  30,  31,  31,  32,  31,  31,  31,  30,  19,   2,  -3,   2,   9,  11,  12,  11,  10,   8,   6,   4,   3,   2,  -0,  -1,  -3,  -4,  -5,  -5,  -8, -11,  -8, -11, -10,  -9,  -9, -10,  -9,  -9,  -9,  -8,  -8,
+  /*  45.0 */  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22, -24, -25, -26, -26, -27, -27, -28, -28, -28, -27, -26, -27, -26, -27, -27, -27, -23, -22, -20, -20, -19, -17, -16, -15, -15, -14, -13, -11,  -9,  -9,  -7, -12, -11, -14, -15, -15, -15, -17, -20, -22, -23, -24, -25, -25, -27, -27, -28, -28, -31, -31, -34, -36, -37, -37, -36, -35, -36, -37, -37, -37, -37, -36, -35, -34, -34, -32, -30, -30, -28, -27, -26, -26, -25, -24, -23, -22, -21, -20, -18, -17, -15, -13, -10,  -7,  -4,  -2,   3,   6,  10,  14,  17,  19,  21,  23,  26,  28,  30,  32,  34,  37,  39,  42,  44,  46,  49,  51,  53,  55,  57,  60,  61,  63,  65,  65,  65,  65,  64,  64,  63,  62,  61,  59,  59,  59,  59,  57,  55,  56,  54,  53,  51,  48,  46,  46,  45,  45,  44,  47,  48,  47,  47,  49,  51,  53,  53,  51,  52,  53,  45,  42,  39,  41,  43,  43,  44,  46,  46,  46,  46,  45,  44,  43,  43,  42,  38,  37,  34,  32,  33,  32,  31,  29,  27,  26,  26,  22,  18,  16,  14,  13,  13,  13,  11,   8,   4,   1,  -2,  -4,  -6,  -9, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -32, -33, -35, -37, -38, -38, -39, -41, -42, -43, -44, -44, -45, -47, -48, -50, -49, -45, -40, -44, -52, -56, -58, -63, -66, -67, -65, -61, -59, -57, -57, -57, -56, -53, -53, -51, -49, -49, -49, -49, -47, -47, -46, -44, -42, -40, -37, -34, -32, -29, -26, -22, -18, -15, -12,  -8,  -5,  -2,   0,   2,   4,   6,   8,  11,  14,  16,  18,  20,  23,  24,  23,  24,  25,  29,  30,  26,  26,  27,  28,  29,  28,  28,  27,  26,  26,  26,  28,  24,  14,   1,  -4,   3,  10,  12,  11,  10,   8,   6,   5,   3,   2,  -0,  -2,  -3,  -4,  -5,  -7, -10,  -3, -10,  -9,  -8,  -9,  -7,  -8,  -7,  -7,  -7,  -6,
+  /*  46.0 */  -5,  -4,  -4,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,  -0,  -1,  -1,  -0,  -0,  -1,  -1,  -2,  -3,  -4,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -20, -21, -22, -23, -24, -25, -25, -26, -26, -26, -26, -25, -25, -25, -25, -25, -26, -26, -23, -20, -20, -20, -20, -21, -18, -16, -16, -15, -13, -12, -12, -11, -11, -13, -14, -15, -16, -16, -16, -16, -19, -21, -22, -24, -25, -26, -27, -27, -27, -28, -28, -30, -31, -32, -34, -35, -36, -36, -37, -38, -38, -38, -37, -37, -36, -35, -34, -33, -33, -32, -29, -28, -26, -25, -25, -24, -22, -20, -19, -18, -17, -15, -13, -12,  -9,  -6,  -2,   1,   4,   7,  10,  14,  18,  20,  24,  26,  29,  29,  31,  33,  35,  38,  40,  42,  45,  47,  49,  52,  53,  55,  57,  60,  61,  63,  65,  66,  66,  66,  65,  64,  63,  61,  61,  61,  60,  59,  59,  57,  55,  54,  52,  50,  49,  48,  47,  47,  47,  46,  48,  49,  48,  48,  48,  49,  50,  50,  50,  49,  49,  51,  52,  48,  49,  49,  48,  45,  47,  47,  46,  45,  45,  45,  44,  43,  42,  42,  41,  39,  37,  32,  31,  31,  29,  27,  25,  23,  22,  20,  17,  15,  13,  12,  11,   9,   7,   6,   3,   1,  -1,  -4,  -6,  -8, -10, -12, -15, -16, -18, -20, -22, -24, -26, -27, -29, -30, -31, -33, -35, -36, -37, -38, -39, -41, -41, -42, -43, -44, -44, -46, -48, -50, -51, -51, -51, -50, -52, -51, -51, -56, -60, -61, -60, -58, -54, -53, -51, -50, -49, -52, -50, -49, -49, -49, -48, -46, -45, -45, -44, -42, -41, -39, -36, -34, -32, -28, -25, -22, -19, -16, -13, -11,  -7,  -3,   0,   2,   4,   5,   7,  10,  12,  14,  17,  19,  20,  21,  22,  22,  24,  27,  29,  29,  26,  25,  26,  26,  26,  26,  24,  23,  23,  23,  23,  24,  25,  24,  17,   7,   4,  10,  12,  12,  10,   9,   7,   5,   3,   1,  -1,  -2,  -3,  -4,  -7,  -4,  -5,  -9,  -7,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,
+  /*  47.0 */  -3,  -3,  -2,  -1,  -1,  -1,   0,   0,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   1,   0,  -0,  -1,  -2,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11, -13, -14, -15, -16, -18, -19, -20, -21, -22, -22, -23, -24, -24, -24, -24, -23, -23, -23, -24, -24, -25, -24, -23, -21, -20, -18, -20, -20, -19, -17, -16, -15, -14, -13, -13, -12, -12, -12, -14, -15, -16, -16, -16, -17, -19, -21, -22, -24, -25, -26, -27, -28, -29, -30, -29, -31, -32, -33, -35, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -36, -35, -34, -33, -31, -29, -28, -28, -26, -24, -22, -21, -20, -19, -18, -17, -15, -14, -11,  -8,  -4,  -0,   3,   6,   8,  11,  15,  17,  21,  25,  28,  32,  35,  36,  35,  36,  38,  41,  44,  46,  48,  50,  52,  54,  56,  57,  60,  62,  63,  65,  66,  66,  66,  65,  64,  62,  62,  62,  61,  60,  59,  58,  57,  56,  55,  53,  50,  50,  50,  49,  48,  48,  50,  50,  49,  49,  48,  48,  48,  48,  48,  48,  48,  50,  49,  48,  48,  49,  50,  50,  49,  48,  48,  47,  45,  45,  44,  43,  42,  42,  41,  39,  39,  36,  33,  33,  31,  29,  28,  25,  24,  22,  21,  20,  18,  15,  14,  11,   9,   7,   5,   2,  -1,  -4,  -6,  -8, -11, -14, -15, -16, -18, -19, -20, -21, -22, -23, -25, -27, -29, -30, -32, -34, -35, -35, -36, -37, -39, -39, -41, -42, -43, -44, -45, -46, -47, -47, -48, -49, -49, -49, -48, -47, -47, -48, -53, -54, -51, -47, -43, -45, -47, -49, -49, -48, -47, -46, -45, -44, -43, -44, -44, -43, -42, -40, -38, -35, -33, -31, -28, -26, -23, -20, -17, -15, -12,  -8,  -4,  -1,   2,   4,   5,   7,   9,  12,  13,  16,  18,  19,  20,  20,  21,  23,  25,  26,  28,  27,  25,  24,  24,  25,  25,  22,  21,  20,  21,  21,  21,  22,  23,  25,  24,  16,   4,  10,  12,  12,  10,   9,   7,   5,   3,   1,   0,  -1,  -3,  -7,  -3,  -4,  -6,  -5,  -4,  -5,  -5,  -4,  -4,  -4,  -3,  -3,
+  /*  48.0 */  -1,  -0,  -0,   1,   1,   1,   2,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   2,   1,   1,  -0,  -1,  -2,  -3,  -4,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -22, -22, -22, -23, -23, -23, -20, -20, -22, -18, -18, -18, -17, -17, -16, -15, -15, -13, -14, -14, -15, -15, -16, -16, -17, -17, -18, -18, -18, -21, -22, -24, -25, -27, -27, -28, -29, -31, -32, -31, -33, -35, -35, -36, -37, -37, -37, -37, -38, -38, -38, -38, -38, -36, -35, -33, -33, -32, -30, -28, -28, -27, -24, -22, -21, -20, -19, -18, -17, -16, -14,  -9,  -4,  -2,   2,   5,   8,   9,  13,  17,  21,  25,  27,  29,  32,  35,  36,  36,  37,  40,  42,  44,  46,  49,  51,  52,  54,  56,  58,  60,  62,  63,  65,  66,  65,  65,  64,  63,  63,  63,  62,  62,  61,  60,  58,  57,  56,  55,  54,  53,  52,  52,  53,  54,  52,  51,  51,  50,  49,  48,  47,  46,  46,  46,  46,  47,  48,  49,  49,  48,  47,  46,  45,  45,  45,  46,  46,  44,  44,  44,  43,  41,  40,  39,  38,  36,  34,  34,  33,  31,  30,  28,  25,  24,  22,  21,  20,  18,  16,  14,  12,   9,   7,   4,   1,  -3,  -5,  -9, -12, -13, -14, -16, -17, -18, -19, -20, -22, -21, -20, -22, -24, -27, -29, -31, -33, -33, -33, -34, -35, -36, -38, -40, -41, -41, -42, -43, -43, -43, -43, -43, -45, -46, -47, -50, -51, -51, -51, -49, -46, -43, -42, -44, -48, -49, -49, -48, -47, -46, -44, -44, -44, -44, -44, -43, -43, -41, -40, -37, -34, -32, -30, -28, -26, -23, -21, -18, -16, -13,  -9,  -6,  -2,   2,   3,   5,   7,   9,  11,  14,  16,  17,  18,  19,  19,  20,  21,  22,  23,  25,  26,  26,  24,  22,  24,  23,  22,  22,  20,  20,  20,  20,  20,  21,  21,  24,  25,  15,   2,   7,  10,  10,   9,   8,   6,   5,   3,   2,   1,  -2,  -4,  -0,  -6,  -3,  -2,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,
+  /*  49.0 */   0,   1,   1,   2,   2,   3,   4,   4,   5,   6,   6,   6,   6,   7,   7,   7,   7,   6,   6,   5,   5,   5,   4,   3,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -11, -12, -13, -14, -16, -17, -18, -18, -19, -19, -20, -20, -20, -21, -21, -22, -21, -20, -17, -17, -21, -19, -17, -16, -16, -16, -16, -15, -15, -15, -14, -15, -15, -16, -16, -17, -17, -17, -18, -19, -19, -20, -21, -22, -23, -25, -27, -28, -29, -31, -32, -33, -34, -35, -36, -37, -38, -38, -39, -39, -38, -38, -39, -39, -39, -39, -38, -37, -36, -35, -34, -33, -30, -27, -27, -26, -24, -20, -19, -20, -20, -18, -16, -14, -10,  -3,   2,   5,   7,   9,  12,  15,  22,  24,  22,  23,  26,  29,  33,  35,  37,  39,  41,  43,  45,  47,  50,  52,  53,  55,  56,  58,  60,  62,  64,  65,  65,  64,  64,  64,  63,  63,  63,  62,  61,  60,  59,  58,  57,  56,  56,  58,  58,  58,  56,  55,  54,  53,  52,  51,  50,  49,  48,  47,  46,  45,  45,  45,  47,  47,  48,  48,  48,  48,  47,  46,  47,  47,  46,  46,  43,  43,  43,  43,  41,  39,  37,  33,  32,  34,  34,  33,  31,  28,  26,  23,  23,  21,  19,  17,  15,  13,  10,  10,   9,   7,   5,   1,  -3,  -5,  -7,  -9, -12, -14, -15, -16, -16, -16, -19, -21, -22, -20, -19, -22, -24, -27, -29, -31, -31, -31, -32, -33, -34, -35, -37, -38, -39, -40, -40, -40, -40, -40, -42, -44, -45, -45, -46, -47, -44, -44, -42, -41, -42, -43, -44, -46, -47, -46, -46, -45, -45, -45, -44, -43, -43, -42, -42, -41, -40, -39, -37, -34, -32, -30, -28, -25, -23, -21, -19, -16, -13, -10,  -7,  -3,   0,   3,   5,   7,   9,  11,  13,  14,  16,  16,  18,  19,  20,  20,  21,  21,  23,  24,  24,  23,  21,  22,  22,  21,  21,  20,  20,  20,  20,  21,  21,  21,  22,  25,  25,  12,   1,   4,   8,   9,   9,   8,   7,   5,   4,   2,  -1,   1,   1,  -2,   0,   0,  -0,  -0,   0,  -0,   0,   0,   0,   0,
+  /*  50.0 */  -6,  -6,  -5,  -4,  -2,  -1,   1,   2,   3,   5,   5,   7,   7,   8,   8,   9,   9,   8,   8,   8,   7,   7,   7,   6,   5,   5,   4,   3,   2,   1,  -0,  -1,  -2,  -3,  -4,  -5,  -7,  -8,  -9, -10, -12, -13, -14, -15, -16, -17, -17, -17, -18, -18, -18, -20, -20, -16, -15, -17, -17, -17, -17, -16, -16, -16, -16, -16, -15, -14, -16, -17, -18, -17, -17, -17, -17, -19, -19, -19, -20, -20, -21, -23, -24, -25, -27, -28, -29, -30, -31, -33, -34, -35, -35, -36, -38, -39, -39, -40, -40, -39, -39, -39, -40, -40, -40, -39, -38, -36, -35, -33, -31, -29, -26, -25, -24, -24, -23, -23, -21, -19, -18, -16, -13, -10,  -5,   1,   4,   8,  11,  13,  16,  22,  24,  23,  23,  26,  29,  32,  35,  38,  40,  42,  45,  47,  49,  51,  53,  54,  56,  57,  59,  61,  62,  63,  64,  64,  64,  63,  63,  63,  63,  63,  62,  61,  60,  58,  58,  57,  56,  57,  57,  59,  58,  58,  56,  55,  54,  53,  52,  50,  48,  46,  45,  45,  45,  45,  46,  47,  48,  49,  48,  48,  48,  47,  47,  47,  46,  45,  44,  44,  43,  42,  40,  37,  35,  33,  31,  32,  32,  32,  31,  29,  27,  25,  23,  21,  19,  16,  14,  12,  11,  11,  11,  10,   8,   5,   3,   0,  -5,  -7,  -8, -10, -12, -14, -15, -15, -16, -17, -20, -21, -18, -17, -19, -22, -24, -26, -28, -29, -29, -30, -31, -32, -33, -34, -35, -35, -36, -38, -39, -40, -42, -44, -45, -45, -45, -44, -43, -43, -41, -41, -40, -41, -42, -42, -45, -46, -46, -46, -45, -43, -43, -42, -42, -41, -41, -40, -40, -40, -39, -37, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -11,  -8,  -5,  -1,   3,   5,   7,   9,  11,  12,  12,  13,  15,  17,  19,  20,  21,  21,  20,  21,  22,  23,  22,  21,  21,  22,  21,  19,  19,  19,  19,  20,  20,  21,  21,  22,  22,  24,  24,  16,   5,   2,   6,   8,   8,   8,   7,   5,   4,   3,   4,   1,   3,   2,   2,   1,   1,   1,   1,  -1,  -3,  -5,  -6,
+  /*  51.0 */  -8,  -6,  -7,  -8, -10, -11, -11, -10,  -7,  -5,  -2,   2,   5,   8,   9,  10,  10,  10,  10,  10,  10,  10,   9,   8,   7,   7,   6,   5,   4,   3,   3,   2,   1,  -0,  -1,  -3,  -3,  -5,  -6,  -8,  -9, -10, -11, -13, -14, -14, -15, -15, -16, -17, -17, -16, -15, -15, -15, -15, -14, -14, -15, -15, -16, -16, -16, -16, -14, -13, -17, -18, -19, -19, -19, -20, -20, -21, -21, -21, -21, -22, -23, -25, -27, -28, -30, -31, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -40, -40, -41, -42, -41, -41, -42, -42, -41, -39, -37, -36, -34, -33, -32, -29, -26, -24, -22, -21, -20, -19, -18, -17, -15, -13, -10,  -8,  -5,  -2,   3,   9,  11,  14,  16,  20,  24,  24,  25,  27,  31,  34,  36,  39,  41,  43,  45,  48,  50,  52,  53,  55,  57,  58,  59,  61,  62,  63,  63,  63,  63,  63,  63,  63,  63,  62,  62,  60,  59,  58,  57,  59,  60,  58,  59,  60,  59,  58,  56,  55,  54,  54,  53,  51,  48,  46,  45,  45,  44,  45,  45,  45,  46,  47,  48,  48,  47,  46,  46,  44,  44,  43,  42,  41,  39,  38,  37,  36,  34,  31,  30,  30,  30,  30,  28,  25,  25,  25,  23,  20,  18,  16,  14,  13,  12,  11,  10,   9,   7,   6,   5,   3,  -1,  -4,  -6,  -8, -10, -11, -13, -14, -15, -17, -18, -18, -16, -16, -18, -20, -23, -24, -26, -27, -27, -28, -29, -30, -31, -32, -33, -35, -36, -38, -39, -40, -41, -42, -43, -43, -42, -42, -41, -41, -41, -40, -40, -40, -41, -42, -43, -43, -43, -43, -43, -43, -42, -40, -40, -39, -38, -38, -38, -38, -39, -37, -34, -32, -29, -27, -25, -23, -21, -19, -16, -14, -11,  -8,  -5,  -2,   2,   4,   6,   8,   9,  10,  11,  12,  14,  16,  17,  18,  20,  20,  20,  19,  20,  21,  21,  20,  19,  20,  18,  17,  17,  18,  18,  18,  19,  19,  20,  22,  23,  23,  25,  25,  20,   6,   1,   5,   7,   8,   8,   8,   6,   6,   6,   5,   4,   3,   1,  -1,  -4,  -5,  -9, -10,  -8,  -5,  -8,
+  /*  52.0 */   4,   2,   4,   5,   7,   8,   7,   6,   6,   3,   2,  -2,  -3,  -0,   2,   6,   8,  10,  11,  11,  11,  11,  11,  10,  10,   9,   9,   8,   7,   7,   6,   5,   4,   2,   1,   0,  -1,  -2,  -4,  -5,  -7,  -8,  -9, -10, -11, -12, -12, -13, -14, -13, -14, -14, -14, -14, -13, -12, -13, -14, -14, -14, -15, -15, -15, -13, -12, -15, -18, -19, -20, -20, -20, -20, -21, -22, -22, -22, -23, -24, -24, -27, -30, -31, -32, -33, -33, -33, -34, -35, -36, -37, -39, -41, -42, -43, -43, -42, -43, -43, -43, -43, -44, -43, -42, -40, -39, -36, -34, -33, -31, -30, -28, -26, -23, -20, -18, -17, -16, -15, -13, -10,  -8,  -5,  -1,   2,   4,   9,  12,  15,  17,  21,  22,  24,  26,  29,  32,  34,  36,  39,  42,  45,  47,  49,  50,  52,  54,  56,  57,  58,  60,  61,  61,  62,  62,  62,  62,  62,  62,  62,  62,  61,  61,  59,  58,  57,  58,  61,  61,  60,  60,  59,  58,  58,  56,  56,  55,  54,  54,  52,  49,  48,  46,  45,  45,  44,  44,  43,  44,  44,  45,  45,  44,  44,  43,  42,  41,  40,  39,  37,  35,  33,  33,  32,  30,  29,  28,  28,  27,  26,  24,  21,  22,  23,  21,  20,  18,  16,  14,  13,  12,  11,  10,   8,   7,   7,   6,   4,   2,  -0,  -1,  -3,  -4,  -6,  -7,  -8,  -9, -12, -14, -14, -13, -13, -16, -18, -21, -23, -25, -25, -25, -26, -27, -28, -29, -30, -31, -33, -34, -36, -37, -39, -40, -41, -41, -41, -42, -43, -44, -43, -43, -42, -41, -39, -39, -40, -41, -42, -43, -41, -40, -40, -39, -38, -37, -37, -38, -38, -39, -40, -39, -36, -34, -32, -30, -27, -25, -23, -21, -19, -16, -14, -12,  -9,  -7,  -4,  -0,   2,   4,   6,   7,   8,   9,  11,  12,  14,  16,  18,  19,  19,  18,  18,  19,  20,  20,  19,  19,  18,  18,  16,  16,  17,  18,  19,  19,  20,  20,  21,  22,  23,  24,  24,  24,  12,   2,  -1,   3,   7,   8,   9,   9,   8,   6,   3,   1,  -3,  -6,  -2,   1,   5,   6,   4,   6,   6,   4,
+  /*  53.0 */   5,   2,   2,   2,   3,   3,   5,   6,   8,  10,  13,  14,  14,  10,   4,   0,   0,   2,   4,   7,   9,  10,  11,  11,  12,  11,  11,  10,   9,   8,   7,   6,   6,   5,   3,   2,   1,  -0,  -2,  -3,  -5,  -6,  -7,  -8,  -9,  -9, -11, -12,  -9, -11, -12, -12, -13, -12, -11, -12, -12, -13, -13, -14, -14, -15, -14, -15, -16, -18, -20, -21, -22, -22, -22, -22, -22, -23, -24, -24, -25, -26, -27, -28, -30, -32, -33, -34, -34, -35, -36, -38, -39, -40, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -43, -41, -39, -37, -34, -32, -30, -29, -27, -25, -23, -22, -19, -18, -16, -15, -14, -10,  -7,  -3,  -0,   4,   7,  10,  13,  15,  19,  21,  23,  25,  28,  31,  34,  36,  39,  41,  44,  45,  47,  50,  51,  54,  56,  58,  59,  59,  60,  60,  60,  60,  61,  61,  61,  61,  61,  60,  60,  60,  60,  60,  60,  59,  59,  60,  61,  60,  61,  60,  59,  58,  57,  56,  56,  55,  55,  53,  51,  49,  46,  45,  44,  43,  42,  42,  42,  41,  41,  41,  41,  41,  40,  39,  37,  36,  34,  33,  31,  30,  31,  30,  29,  28,  28,  27,  26,  24,  22,  20,  19,  19,  18,  17,  17,  16,  14,  12,  11,  10,   9,   8,   8,   7,   5,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -6,  -9, -11, -12, -11, -12, -15, -17, -19, -20, -23, -24, -24, -25, -26, -27, -28, -29, -30, -32, -33, -35, -37, -38, -39, -39, -40, -40, -40, -41, -41, -42, -41, -40, -39, -39, -40, -41, -41, -40, -40, -40, -39, -38, -37, -36, -36, -37, -38, -38, -37, -36, -35, -35, -34, -31, -29, -27, -25, -23, -20, -19, -17, -15, -12, -10,  -8,  -6,  -4,  -2,   0,   2,   5,   6,   8,   9,  11,  13,  15,  17,  18,  18,  17,  18,  18,  18,  19,  19,  18,  18,  17,  16,  16,  17,  18,  18,  18,  19,  20,  21,  21,  23,  23,  24,  24,  21,  17,   5,  -3,   1,   8,  10,   9,   5,   1,  -3,  -0,   3,   5,   7,   5,   2,   2,   1,   1,   2,   5,
+  /*  54.0 */   5,  -0,   2,   3,   4,   4,   5,   6,   7,   8,  10,  11,  13,  15,  18,  18,  16,  13,   8,   7,   8,   8,   8,   8,   9,  10,  11,  11,  11,  10,  11,  10,   9,   7,   5,   4,   3,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -8,  -9,  -6,  -8,  -9,  -9, -10, -10, -10, -11, -12, -12, -13, -14, -14, -14, -15, -15, -16, -18, -19, -20, -22, -23, -23, -24, -25, -25, -26, -26, -26, -27, -29, -30, -30, -31, -32, -34, -36, -37, -38, -39, -39, -40, -42, -43, -44, -45, -46, -46, -46, -45, -45, -45, -44, -44, -43, -42, -41, -39, -37, -35, -32, -31, -29, -27, -24, -23, -21, -20, -18, -18, -16, -15, -13,  -9,  -5,  -1,   2,   6,  11,  14,  16,  18,  21,  24,  27,  30,  32,  35,  38,  40,  42,  44,  47,  49,  51,  53,  55,  58,  59,  60,  60,  60,  60,  60,  61,  61,  61,  61,  61,  61,  60,  60,  60,  61,  61,  61,  60,  59,  58,  58,  58,  59,  59,  59,  58,  58,  57,  56,  55,  54,  53,  51,  48,  46,  44,  43,  41,  41,  41,  40,  40,  39,  39,  40,  39,  39,  37,  36,  35,  34,  32,  30,  29,  29,  29,  28,  28,  27,  26,  25,  24,  23,  21,  20,  18,  17,  17,  16,  16,  15,  13,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   3,   2,   0,   0,  -1,  -3,  -5,  -8, -10, -11, -10, -10, -12, -14, -17, -18, -20, -22, -23, -24, -26, -27, -27, -28, -30, -31, -33, -34, -36, -37, -38, -38, -39, -39, -39, -39, -40, -39, -39, -40, -38, -36, -37, -39, -40, -39, -39, -38, -37, -36, -36, -37, -39, -40, -39, -38, -36, -34, -34, -33, -32, -33, -31, -27, -24, -22, -21, -19, -17, -15, -13, -11,  -9,  -8,  -6,  -4,  -2,   1,   4,   5,   7,   8,  10,  12,  13,  14,  16,  17,  16,  16,  17,  17,  18,  17,  16,  17,  17,  15,  16,  17,  18,  18,  19,  19,  20,  20,  20,  22,  22,  24,  25,  24,  22,  14,   5,  -1,   4,   6,   2,   0,   2,   4,   4,   3,   2,   2,   2,   3,   3,   2,   2,   4,   5,
+  /*  55.0 */  -1,   1,   2,   3,   4,   5,   5,   6,   6,   7,   9,  10,  12,  14,  14,  16,  17,  17,  17,  18,  17,  16,  14,  13,  12,  10,   9,  10,  12,  12,  11,   9,   8,   7,   7,   6,   5,   3,   2,   1,   0,  -1,  -2,  -3,  -5,  -7,  -4,  -4,  -5,  -6,  -7,  -8,  -8,  -9,  -9, -10, -11, -12, -12, -14, -15, -16, -17, -17, -18, -19, -20, -22, -23, -24, -25, -26, -27, -28, -28, -29, -29, -31, -31, -32, -33, -34, -35, -37, -39, -40, -41, -42, -42, -43, -45, -46, -46, -47, -47, -46, -45, -45, -45, -44, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -26, -24, -23, -20, -17, -16, -15, -13, -12, -11,  -8,  -4,  -1,   3,   8,  13,  15,  16,  18,  22,  25,  28,  31,  34,  37,  39,  41,  43,  45,  47,  50,  52,  54,  56,  58,  60,  60,  60,  60,  60,  60,  60,  61,  61,  61,  61,  61,  60,  60,  60,  61,  62,  62,  60,  58,  58,  57,  56,  56,  56,  58,  58,  58,  57,  56,  55,  54,  53,  51,  48,  46,  44,  43,  42,  42,  41,  41,  40,  41,  40,  40,  39,  37,  36,  34,  34,  33,  31,  29,  28,  27,  26,  25,  25,  25,  24,  23,  22,  21,  20,  19,  19,  17,  17,  16,  16,  15,  15,  14,  12,  11,  10,   9,   7,   6,   6,   6,   5,   4,   3,   2,   1,  -0,  -2,  -4,  -6,  -8, -10,  -9,  -9, -10, -12, -14, -17, -18, -20, -22, -23, -24, -25, -26, -27, -29, -30, -32, -33, -34, -35, -35, -36, -36, -36, -36, -37, -37, -37, -38, -37, -35, -36, -38, -38, -38, -38, -37, -38, -38, -38, -38, -40, -40, -40, -39, -37, -35, -34, -33, -32, -32, -32, -30, -26, -25, -23, -20, -18, -17, -15, -13, -11,  -9,  -8,  -6,  -4,  -2,   0,   2,   4,   5,   7,   9,  12,  13,  14,  14,  15,  15,  15,  16,  16,  16,  15,  16,  16,  16,  16,  17,  18,  18,  19,  19,  20,  20,  20,  20,  21,  21,  24,  25,  23,  22,  20,  14,   1,  -1,   1,   8,  14,   9,   7,   5,   2,   2,   2,  -0,  -2,   1,   4,   4,   2,  -1,
+  /*  56.0 */   2,   2,   3,   3,   3,   3,   3,   4,   5,   8,  10,  12,  13,  13,  14,  14,  15,  15,  15,  16,  17,  16,  14,  13,  12,  13,  14,  11,   7,   6,   7,   8,   9,   9,   8,   8,   6,   6,   5,   3,   2,   1,  -1,  -2,  -4,  -1,  -0,  -1,  -2,  -2,  -3,  -6,  -7,  -7,  -8,  -8, -10, -11, -13, -14, -15, -16, -17, -18, -19, -20, -21, -23, -24, -25, -27, -28, -29, -29, -29, -30, -31, -31, -32, -33, -34, -35, -37, -38, -40, -41, -42, -43, -44, -45, -46, -48, -47, -48, -48, -48, -47, -47, -46, -45, -44, -44, -43, -41, -39, -37, -35, -33, -31, -29, -27, -26, -25, -21, -17, -15, -13, -11, -10,  -9,  -6,  -0,   5,   6,   8,  11,  14,  17,  20,  23,  26,  28,  31,  34,  37,  39,  41,  43,  45,  47,  49,  52,  54,  56,  58,  60,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  62,  63,  63,  61,  61,  61,  61,  62,  62,  60,  58,  57,  55,  56,  57,  58,  58,  57,  56,  55,  54,  52,  50,  48,  47,  45,  45,  44,  43,  42,  42,  41,  41,  40,  39,  38,  37,  36,  35,  33,  32,  30,  28,  26,  25,  25,  24,  23,  23,  22,  21,  21,  20,  19,  19,  17,  17,  17,  17,  16,  15,  15,  14,  13,  12,  10,   9,   8,   8,   7,   6,   6,   5,   4,   3,   1,  -1,  -2,  -5,  -6,  -7,  -7,  -7,  -8,  -8, -10, -13, -16, -18, -19, -20, -22, -23, -24, -25, -27, -28, -30, -31, -31, -32, -34, -34, -35, -35, -35, -35, -36, -36, -36, -36, -36, -37, -38, -38, -38, -38, -39, -39, -39, -40, -41, -41, -41, -40, -39, -38, -37, -36, -34, -34, -33, -32, -29, -28, -27, -26, -24, -22, -20, -18, -15, -11, -10,  -9,  -8,  -7,  -4,  -2,  -0,   2,   4,   6,   8,  10,  11,  12,  13,  13,  14,  15,  15,  15,  15,  14,  14,  15,  15,  16,  17,  18,  18,  18,  19,  19,  19,  18,  18,  18,  20,  21,  22,  24,  23,  21,  19,  15,  11,   7,   8,   9,   8,   8,   7,   6,   4,   2,   3,   1,   1,  -0,  -0,  -0,   1,   2,
+  /*  57.0 */   2,   2,   2,   3,   3,   2,   5,  10,  11,  11,  12,  12,  12,  13,  13,  14,  15,  15,  15,  15,  14,  15,  16,  15,  12,  12,  13,  14,  15,  14,  11,   8,   7,   8,   8,   8,   7,   6,   5,   4,   3,   1,   0,  -1,   1,   2,   1,   1,   1,   1,  -2,  -3,  -4,  -5,  -6,  -8,  -8, -10, -12, -13, -14, -15, -17, -19, -20, -22, -22, -23, -25, -26, -28, -29, -29, -30, -30, -31, -32, -33, -34, -35, -36, -38, -39, -41, -42, -43, -45, -46, -47, -47, -48, -48, -49, -49, -48, -48, -48, -48, -47, -45, -44, -44, -42, -41, -39, -37, -35, -33, -31, -29, -28, -27, -23, -20, -16, -13, -11, -10,  -9,  -7,  -1,   4,   6,   8,  11,  13,  16,  18,  21,  24,  27,  29,  32,  34,  37,  39,  42,  44,  46,  47,  49,  51,  53,  55,  57,  60,  61,  62,  62,  62,  62,  61,  61,  61,  61,  61,  61,  61,  62,  62,  61,  60,  60,  60,  60,  60,  60,  57,  55,  56,  56,  58,  58,  57,  56,  55,  54,  52,  50,  48,  47,  46,  46,  44,  43,  43,  42,  41,  40,  39,  38,  38,  37,  36,  34,  32,  30,  28,  27,  25,  23,  22,  22,  21,  20,  21,  21,  20,  19,  19,  18,  16,  16,  17,  16,  14,  13,  13,  13,  13,  12,  11,   9,   9,   8,   9,   8,   7,   6,   5,   4,   2,   0,  -1,  -3,  -5,  -5,  -5,  -6,  -6,  -7, -10, -12, -14, -16, -18, -19, -21, -22, -23, -25, -26, -28, -29, -29, -30, -31, -32, -33, -34, -34, -34, -35, -35, -36, -36, -36, -37, -38, -38, -38, -39, -39, -39, -39, -40, -41, -40, -40, -40, -39, -38, -37, -36, -35, -35, -34, -34, -33, -30, -27, -24, -24, -23, -21, -19, -17, -15, -13, -12, -10, -10,  -8,  -5,  -4,  -2,   1,   4,   6,   7,   9,  10,  11,  11,  12,  12,  14,  15,  15,  15,  14,  14,  14,  15,  15,  16,  17,  17,  18,  18,  18,  17,  17,  16,  17,  18,  19,  20,  21,  21,  20,  19,  18,  15,  11,  10,  10,   9,   8,   7,   6,   5,   3,   2,   2,   2,   1,   1,   1,   2,   2,
+  /*  58.0 */   2,   1,   1,   2,   4,   4,   7,   9,   9,  10,  11,  11,  12,  12,  13,  14,  14,  14,  15,  15,  15,  15,  15,  15,  16,  15,  13,  13,  12,  13,  14,  13,  10,   6,   6,   7,   7,   7,   5,   4,   3,   3,   2,   3,   4,   3,   2,   3,   2,   1,  -0,  -1,  -2,  -4,  -5,  -6,  -9, -12, -13, -15, -15, -17, -19, -20, -21, -23, -24, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -36, -37, -38, -40, -41, -43, -44, -45, -46, -47, -48, -48, -48, -49, -49, -48, -48, -48, -47, -47, -46, -45, -44, -42, -41, -38, -37, -35, -33, -32, -30, -28, -28, -26, -22, -19, -16, -12,  -9,  -8,  -7,  -3,   3,   5,   6,   9,  11,  14,  17,  19,  22,  25,  27,  30,  32,  35,  38,  40,  42,  43,  45,  47,  49,  51,  52,  54,  56,  58,  60,  62,  63,  63,  63,  63,  63,  62,  62,  61,  61,  61,  61,  61,  61,  61,  61,  60,  60,  60,  60,  57,  56,  56,  56,  58,  57,  57,  56,  55,  53,  50,  49,  49,  48,  47,  46,  45,  44,  43,  42,  42,  41,  39,  38,  37,  36,  34,  33,  31,  29,  27,  25,  22,  21,  20,  20,  20,  19,  19,  20,  19,  18,  17,  16,  15,  16,  15,  15,  15,  14,  14,  14,  13,  12,  11,  11,  10,   9,   9,   9,   8,   7,   6,   5,   4,   2,   1,  -1,  -2,  -3,  -3,  -4,  -5,  -5,  -8, -11, -13, -15, -16, -18, -20, -21, -22, -24, -25, -26, -27, -28, -29, -30, -30, -32, -33, -33, -34, -34, -35, -36, -36, -35, -35, -36, -37, -37, -38, -38, -37, -36, -38, -39, -40, -40, -40, -39, -37, -36, -35, -34, -34, -34, -33, -33, -32, -29, -27, -24, -22, -20, -19, -17, -16, -16, -14, -13, -11,  -9,  -7,  -5,  -2,   1,   2,   4,   6,   7,   8,  10,  10,  10,  11,  11,  12,  14,  15,  14,  13,  13,  13,  13,  14,  15,  15,  16,  16,  17,  17,  16,  16,  17,  16,  17,  19,  19,  18,  18,  19,  17,  15,  13,  10,  10,   9,   7,   6,   7,   6,   3,   2,   2,   1,   1,   1,   1,   1,   2,
+  /*  59.0 */   1,   1,   4,   6,   6,   7,   8,   8,   9,   9,  10,  11,  11,  12,  12,  13,  13,  14,  15,  15,  15,  15,  15,  15,  15,  15,  14,  12,  11,  10,  11,  13,  12,  11,   8,   7,   6,   6,   7,   8,   7,   5,   7,   9,   6,   5,   5,   3,   2,   2,   0,  -1,  -3,  -4,  -5,  -8, -11, -12, -13, -15, -17, -18, -19, -20, -20, -21, -24, -27, -29, -30, -31, -32, -33, -33, -34, -35, -35, -36, -38, -40, -41, -42, -43, -45, -46, -48, -49, -49, -49, -49, -48, -48, -48, -48, -48, -47, -46, -46, -45, -44, -44, -42, -39, -36, -34, -33, -31, -29, -28, -27, -26, -24, -21, -18, -15, -11,  -7,  -5,  -1,   3,   5,   5,   7,  10,  13,  15,  18,  21,  23,  25,  28,  31,  34,  36,  38,  40,  43,  45,  46,  47,  49,  50,  52,  53,  55,  57,  59,  61,  62,  63,  64,  64,  63,  63,  63,  62,  62,  61,  61,  61,  60,  61,  61,  60,  59,  59,  58,  56,  56,  55,  56,  55,  55,  57,  56,  55,  54,  52,  51,  48,  47,  47,  46,  45,  44,  44,  44,  45,  44,  42,  40,  38,  35,  33,  31,  29,  28,  26,  24,  21,  19,  18,  19,  20,  20,  19,  18,  17,  17,  16,  15,  15,  15,  16,  17,  16,  15,  14,  14,  14,  13,  13,  13,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   2,   1,   0,  -1,  -2,  -3,  -3,  -5,  -9, -10, -12, -14, -15, -17, -18, -20, -21, -22, -24, -25, -27, -28, -28, -29, -30, -31, -31, -32, -33, -33, -34, -34, -34, -35, -34, -35, -36, -37, -36, -35, -34, -34, -34, -34, -35, -36, -36, -36, -36, -36, -34, -32, -32, -32, -31, -31, -30, -29, -28, -27, -25, -23, -20, -19, -19, -19, -18, -16, -14, -11,  -8,  -6,  -5,  -3,  -1,   0,   1,   2,   4,   6,   7,   8,   9,  10,  11,  12,  13,  13,  13,  13,  13,  13,  13,  14,  14,  15,  16,  17,  18,  17,  17,  16,  16,  16,  16,  16,  17,  17,  17,  16,  14,  14,  12,  10,   7,   6,   6,   7,   5,   1,   0,   0,   0,  -0,   0,   0,   1,   1,
+  /*  60.0 */   0,   3,   5,   5,   5,   6,   7,   7,   8,   9,   9,  10,  10,  11,  12,  12,  12,  13,  13,  15,  15,  15,  15,  15,  15,  15,  14,  13,   9,  11,  13,  13,  13,  12,  12,  12,  11,  10,  11,  10,  11,  12,  11,  10,   8,   7,   5,   4,   3,   2,   0,  -1,  -3,  -4,  -5,  -7, -10, -12, -12, -14, -16, -17, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -39, -40, -41, -42, -43, -44, -46, -47, -48, -49, -50, -49, -48, -47, -46, -47, -47, -47, -45, -44, -43, -43, -42, -42, -41, -38, -35, -32, -30, -28, -27, -25, -24, -23, -21, -19, -17, -13,  -8,  -5,  -2,   1,   4,   5,   7,   9,  11,  14,  17,  19,  22,  24,  27,  29,  30,  33,  36,  39,  41,  44,  45,  48,  48,  49,  50,  51,  52,  54,  56,  58,  60,  61,  63,  64,  64,  64,  64,  64,  63,  63,  62,  61,  61,  61,  60,  60,  60,  60,  60,  60,  58,  58,  57,  55,  56,  56,  55,  55,  54,  54,  53,  51,  49,  48,  47,  47,  45,  45,  45,  44,  45,  45,  42,  40,  39,  36,  33,  31,  29,  27,  25,  23,  20,  19,  19,  19,  20,  19,  18,  16,  16,  15,  15,  16,  16,  16,  16,  16,  16,  14,  12,  11,  12,  11,  11,  11,  11,  11,  10,   8,   7,   7,   7,   6,   5,   4,   3,   2,   0,  -1,  -2,  -3,  -3,  -4,  -8, -10, -11, -13, -15, -16, -17, -18, -20, -21, -23, -24, -25, -26, -26, -28, -28, -29, -30, -31, -31, -32, -32, -32, -32, -32, -32, -33, -34, -34, -33, -32, -31, -31, -33, -35, -35, -34, -34, -34, -34, -33, -33, -32, -31, -31, -31, -29, -28, -28, -28, -28, -28, -27, -26, -23, -20, -19, -18, -17, -15, -12, -10,  -8,  -6,  -4,  -3,  -2,  -1,   1,   2,   4,   4,   5,   5,   6,   9,  10,  11,  12,  13,  12,  13,  14,  14,  14,  14,  14,  15,  16,  17,  17,  17,  17,  16,  15,  14,  14,  14,  14,  15,  14,  13,  13,  13,  12,  11,   9,   8,   9,   4,  -1,  -1,  -1,  -2,  -2,  -1,  -0,   0,   0,
+  /*  61.0 */   5,   4,   4,   4,   5,   6,   6,   7,   7,   7,   8,   8,   9,  10,  11,  11,  11,  12,  12,  13,  14,  14,  14,  14,  14,  15,  15,  15,  11,   6,   8,  12,  14,  16,  17,  18,  18,  16,  15,  17,  16,  13,  12,  10,   8,   7,   6,   5,   4,   3,   1,  -0,  -1,  -2,  -3,  -5,  -8, -11, -12, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -31, -32, -32, -33, -34, -35, -37, -38, -39, -41, -42, -43, -44, -45, -46, -48, -48, -49, -49, -49, -48, -47, -46, -46, -46, -45, -44, -43, -42, -40, -38, -37, -37, -35, -33, -31, -29, -27, -25, -24, -23, -22, -21, -20, -18, -13,  -8,  -3,  -0,   3,   6,   8,   9,  11,  13,  16,  19,  21,  23,  25,  27,  29,  31,  33,  36,  38,  42,  46,  46,  48,  49,  49,  50,  51,  52,  53,  55,  56,  58,  60,  62,  63,  64,  65,  65,  65,  64,  64,  63,  63,  62,  61,  61,  60,  60,  60,  60,  59,  60,  59,  59,  58,  58,  57,  57,  55,  53,  52,  51,  51,  51,  49,  48,  47,  46,  45,  46,  46,  46,  45,  43,  40,  38,  36,  34,  32,  31,  29,  26,  23,  21,  20,  19,  19,  19,  19,  18,  17,  15,  15,  16,  16,  16,  16,  15,  15,  14,  13,  12,  12,  12,  11,  11,  11,  11,  10,   9,   9,   8,   7,   7,   6,   5,   3,   3,   1,  -0,  -2,  -3,  -4,  -3,  -3,  -6,  -9, -10, -11, -13, -15, -17, -18, -19, -20, -21, -23, -24, -24, -25, -26, -27, -27, -28, -29, -29, -29, -29, -29, -29, -29, -29, -30, -31, -30, -30, -30, -30, -31, -32, -33, -34, -34, -34, -33, -33, -32, -31, -31, -30, -30, -30, -29, -28, -27, -26, -26, -26, -26, -26, -24, -21, -19, -19, -17, -15, -13, -11, -10,  -8,  -7,  -6,  -5,  -3,  -1,   0,   2,   3,   3,   4,   5,   8,   9,  11,  11,  12,  13,  13,  13,  14,  14,  14,  15,  15,  15,  16,  16,  16,  17,  16,  15,  14,  13,  13,  14,  14,  14,  12,  11,  12,  12,  12,  11,  10,  10,  10,   8,   5,   3,   1,  -1,  -2,  -0,   4,   5,
+  /*  62.0 */   5,   5,   4,   5,   5,   6,   6,   6,   6,   6,   7,   7,   8,   8,   9,  10,  10,  11,  11,  12,  12,  12,  12,  12,  12,  14,  16,  15,  12,  10,  11,  16,  18,  18,  17,  17,  18,  18,  17,  15,  13,  12,  11,   9,   8,   7,   6,   5,   4,   2,   2,   1,   0,  -1,  -2,  -4,  -7, -11, -13, -14, -15, -18, -20, -22, -24, -26, -28, -29, -29, -30, -31, -32, -34, -34, -35, -37, -38, -40, -42, -42, -43, -44, -45, -46, -47, -48, -48, -48, -48, -48, -47, -46, -45, -44, -44, -43, -42, -40, -39, -38, -36, -34, -33, -31, -29, -27, -25, -24, -24, -23, -21, -19, -16, -13,  -9,  -5,  -1,   2,   6,  10,   9,  10,  12,  15,  18,  20,  22,  23,  25,  29,  31,  33,  37,  42,  45,  48,  49,  47,  47,  50,  50,  50,  51,  52,  53,  54,  55,  57,  59,  60,  62,  63,  64,  65,  65,  65,  65,  64,  64,  64,  63,  62,  62,  61,  61,  60,  60,  60,  60,  60,  59,  59,  58,  57,  56,  54,  52,  50,  49,  50,  50,  49,  48,  47,  46,  45,  45,  46,  46,  45,  42,  39,  37,  35,  34,  32,  30,  27,  23,  22,  21,  19,  19,  19,  18,  18,  19,  19,  18,  18,  18,  17,  17,  16,  15,  14,  14,  14,  13,  12,  11,  12,  11,  11,  10,   9,   9,   8,   8,   7,   6,   4,   2,   1,  -0,  -1,  -1,  -2,  -3,  -3,  -3,  -6,  -9, -10, -11, -11, -13, -15, -17, -18, -19, -20, -21, -22, -22, -23, -24, -25, -25, -25, -26, -27, -27, -28, -27, -27, -27, -27, -27, -27, -28, -29, -29, -29, -29, -29, -30, -30, -31, -31, -31, -31, -31, -30, -30, -29, -29, -29, -29, -28, -27, -25, -25, -24, -24, -23, -22, -20, -19, -22, -22, -18, -14, -12, -12, -11, -10,  -9,  -8,  -6,  -5,  -3,  -1,  -0,   1,   1,   2,   4,   7,   8,   9,  11,  12,  12,  12,  12,  12,  13,  13,  14,  14,  14,  14,  14,  14,  15,  14,  14,  13,  13,  13,  13,  13,  12,  11,  11,  11,  10,  10,  11,  11,  11,  10,   8,   6,   4,   2,   3,   5,   5,   5,
+  /*  63.0 */   4,   5,   5,   4,   5,   5,   5,   5,   6,   6,   6,   7,   7,   7,   7,   8,   9,  10,  11,  11,  11,  11,  11,  12,  12,  12,  12,  14,  16,  17,  15,  15,  16,  17,  17,  17,  16,  15,  13,  12,  12,  11,  10,   8,   7,   6,   5,   4,   3,   2,   2,   1,   0,  -1,  -3,  -5,  -8, -11, -12, -14, -16, -18, -20, -22, -23, -25, -27, -27, -28, -29, -30, -31, -32, -34, -35, -36, -38, -39, -41, -42, -43, -44, -45, -45, -45, -45, -45, -45, -45, -44, -44, -43, -43, -42, -41, -41, -40, -39, -38, -37, -36, -35, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11,  -9,  -6,  -4,  -1,   2,   7,  10,  11,  12,  14,  16,  18,  20,  22,  25,  28,  30,  32,  37,  41,  44,  47,  49,  50,  48,  46,  48,  50,  50,  51,  52,  52,  53,  55,  56,  57,  59,  61,  62,  63,  64,  65,  65,  65,  65,  65,  65,  63,  63,  63,  62,  61,  61,  61,  62,  62,  61,  60,  60,  59,  57,  56,  54,  52,  51,  50,  50,  49,  48,  47,  47,  45,  45,  45,  45,  44,  42,  41,  40,  37,  35,  33,  32,  31,  29,  25,  22,  20,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  16,  15,  15,  15,  14,  14,  14,  13,  13,  12,  12,  11,  11,  11,   9,   9,   9,   9,   8,   6,   4,   2,   1,   1,   1,  -0,  -2,  -2,  -2,  -3,  -6,  -8, -10, -11, -11, -12, -13, -14, -16, -17, -18, -19, -20, -21, -21, -22, -23, -23, -23, -24, -24, -24, -25, -24, -25, -26, -26, -26, -27, -26, -27, -27, -27, -28, -29, -29, -29, -29, -30, -30, -30, -29, -30, -30, -29, -29, -29, -28, -26, -25, -24, -24, -23, -22, -22, -23, -22, -20, -18, -18, -17, -15, -14, -14, -13, -13, -12, -11, -11, -10,  -8,  -7,  -6,  -5,  -4,  -2,   1,   5,   7,   8,   8,   9,   9,  10,  11,  11,  11,  12,  12,  12,  12,  12,  11,  12,  13,  13,  13,  13,  13,  13,  12,  12,  11,  12,  12,  11,  10,  10,  10,   9,   9,   9,   8,   7,   7,   6,   5,   5,   5,   4,
+  /*  64.0 */   4,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   7,   7,   8,   9,  10,  10,  10,  10,  10,  11,  12,  12,  12,  13,  14,  14,  15,  15,  14,  13,  13,  13,  12,  12,  11,  10,  10,   9,   8,   7,   6,   5,   5,   4,   3,   2,  -0,  -3,  -6,  -8,  -9, -11, -13, -14, -16, -18, -19, -21, -22, -23, -24, -25, -27, -28, -29, -30, -32, -34, -34, -35, -37, -39, -40, -42, -43, -44, -44, -43, -43, -42, -41, -41, -40, -40, -40, -40, -39, -39, -38, -37, -37, -36, -35, -34, -34, -33, -32, -31, -29, -28, -26, -23, -20, -16, -13, -11,  -8,  -4,  -2,  -2,  -1,   1,   7,  12,  14,  15,  16,  19,  21,  22,  26,  28,  28,  29,  33,  36,  40,  43,  46,  49,  50,  50,  48,  45,  47,  50,  52,  53,  54,  54,  54,  55,  56,  58,  59,  61,  62,  63,  65,  65,  65,  66,  66,  66,  67,  67,  66,  65,  65,  64,  63,  63,  62,  61,  60,  58,  57,  55,  53,  52,  52,  52,  51,  51,  50,  49,  47,  45,  43,  42,  43,  43,  42,  41,  41,  39,  36,  34,  32,  31,  30,  30,  28,  26,  24,  21,  19,  18,  17,  18,  18,  18,  18,  18,  18,  17,  16,  16,  16,  15,  15,  15,  14,  14,  13,  13,  12,  11,  10,   9,   9,   9,   8,   7,   6,   5,   4,   2,   1,  -0,  -1,  -2,  -3,  -2,  -2,  -4,  -6,  -8, -10, -11, -12, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -21, -21, -21, -22, -22, -22, -22, -23, -24, -25, -25, -25, -25, -24, -24, -25, -27, -28, -28, -28, -28, -28, -29, -29, -29, -28, -27, -26, -26, -26, -25, -24, -23, -22, -21, -20, -20, -20, -20, -20, -19, -18, -18, -18, -17, -16, -16, -15, -14, -13, -11,  -9, -10,  -9,  -6,  -3,  -0,   1,   3,   4,   5,   6,   6,   6,   7,   8,   9,   9,   9,  11,  11,  10,  10,  10,  10,  10,  10,  11,  11,  11,  12,  12,  12,  12,  12,  12,  11,  11,  11,  10,  10,   9,   9,   8,   8,   8,   7,   6,   5,   4,   4,   4,   4,
+  /*  65.0 */   5,   4,   4,   5,   5,   5,   5,   4,   4,   4,   4,   4,   5,   6,   6,   7,   7,   7,   8,   8,   9,   9,   9,   9,   9,  10,  10,  10,  10,  11,  11,  11,  11,  12,  12,  12,  12,  12,  11,  11,  11,  11,  10,   9,   9,   8,   7,   7,   5,   3,   2,  -0,  -3,  -7, -10, -11, -11, -13, -15, -16, -16, -18, -19, -20, -20, -22, -22, -24, -25, -26, -28, -29, -31, -33, -34, -34, -36, -37, -38, -39, -40, -41, -41, -41, -41, -40, -39, -38, -38, -38, -37, -37, -37, -37, -36, -35, -33, -33, -33, -33, -32, -32, -30, -28, -26, -25, -23, -21, -19, -16, -13, -11,  -8,  -6,  -5,  -2,   1,   3,   6,  12,  16,  18,  19,  20,  22,  26,  28,  27,  27,  29,  33,  37,  40,  43,  46,  48,  49,  49,  48,  45,  44,  46,  48,  51,  54,  56,  56,  56,  56,  58,  59,  59,  61,  63,  64,  64,  65,  66,  66,  67,  67,  67,  67,  67,  66,  66,  64,  63,  62,  61,  60,  58,  57,  56,  54,  53,  53,  52,  52,  51,  51,  50,  48,  46,  45,  44,  43,  41,  41,  40,  40,  39,  38,  36,  34,  32,  31,  30,  29,  27,  25,  23,  20,  19,  18,  18,  18,  18,  17,  18,  18,  17,  17,  17,  17,  17,  17,  17,  15,  13,  13,  12,  11,  10,   9,   8,   8,   7,   7,   6,   6,   5,   4,   2,   1,  -0,  -0,  -2,  -3,  -2,  -1,  -2,  -4,  -6,  -8, -10, -11, -11, -13, -13, -14, -15, -16, -17, -18, -18, -19, -19, -19, -19, -20, -21, -20, -20, -20, -21, -22, -23, -23, -23, -23, -22, -23, -25, -25, -25, -25, -25, -25, -24, -24, -25, -25, -24, -23, -22, -22, -22, -21, -20, -19, -18, -18, -17, -17, -18, -18, -18, -18, -17, -17, -17, -17, -17, -17, -16, -14, -10,  -7,  -5,  -4,  -4,  -3,  -2,  -0,   0,   1,   2,   3,   3,   4,   5,   6,   6,   7,   9,   9,   9,  10,   9,   7,   7,   8,   8,   8,   8,   9,   9,   9,  10,  10,  10,  10,  11,  11,  11,  11,  10,  10,   9,   9,   7,   7,   7,   6,   6,   5,   5,   5,   5,   5,
+  /*  66.0 */   5,   4,   4,   4,   4,   4,   3,   3,   4,   4,   4,   4,   4,   4,   5,   5,   5,   6,   6,   6,   7,   7,   7,   7,   8,   8,   9,   9,  10,  10,   9,   9,  10,  10,   9,   9,   9,   9,   9,   9,   9,   8,   7,   6,   6,   4,   2,  -0,  -2,  -4,  -5,  -6,  -7,  -7,  -9, -10, -12, -13, -15, -16, -17, -18, -19, -19, -19, -20, -21, -23, -24, -25, -27, -29, -30, -32, -33, -34, -36, -36, -37, -38, -38, -39, -39, -39, -38, -37, -37, -36, -36, -36, -36, -35, -34, -34, -34, -33, -33, -32, -31, -30, -30, -29, -28, -28, -26, -24, -23, -21, -18, -16, -13, -11,  -8,  -5,  -1,   3,   6,   8,   9,  13,  17,  19,  21,  22,  24,  27,  28,  30,  31,  32,  34,  36,  39,  42,  44,  45,  47,  48,  48,  48,  48,  49,  49,  51,  53,  55,  57,  58,  58,  59,  60,  60,  61,  61,  62,  63,  64,  65,  65,  65,  66,  66,  65,  65,  65,  64,  63,  63,  62,  60,  58,  58,  56,  54,  54,  53,  52,  52,  51,  51,  50,  49,  47,  46,  45,  44,  43,  43,  42,  41,  40,  39,  37,  35,  34,  33,  32,  31,  30,  29,  28,  25,  23,  22,  20,  20,  19,  18,  18,  18,  18,  17,  17,  18,  18,  17,  16,  15,  15,  15,  14,  13,  12,  12,  12,  10,   8,   6,   6,   7,   6,   4,   3,   2,   1,   0,  -1,  -2,  -3,  -4,  -5,  -6,  -6,  -5,  -4,  -6,  -8, -10, -11, -12, -13, -14, -16, -17, -17, -17, -17, -17, -17, -17, -18, -19, -19, -19, -18, -19, -20, -21, -22, -22, -22, -22, -23, -23, -22, -22, -22, -23, -23, -22, -22, -22, -22, -21, -21, -20, -20, -19, -18, -17, -17, -16, -16, -15, -15, -15, -16, -15, -15, -15, -15, -14, -14, -15, -15, -14, -12,  -8,  -6,  -4,  -4,  -5,  -4,  -3,  -2,  -1,  -0,   1,   2,   3,   4,   5,   5,   5,   5,   7,   8,   8,   7,   5,   4,   5,   7,   7,   7,   7,   7,   7,   8,   8,   9,   9,  10,  10,  10,  10,  10,  10,   9,   9,   8,   8,   8,   6,   6,   6,   6,   5,   5,   5,   5,
+  /*  67.0 */   5,   5,   4,   4,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   5,   5,   5,   6,   6,   7,   8,   8,   9,   9,   9,   9,   9,   9,   8,   7,   7,   7,   7,   7,   7,   7,   6,   5,   4,   4,   2,  -0,  -1,  -2,  -3,  -4,  -5,  -5,  -6,  -8,  -9, -10, -12, -13, -15, -16, -16, -17, -18, -19, -20, -22, -23, -25, -26, -28, -30, -31, -32, -33, -34, -35, -36, -36, -37, -37, -37, -37, -37, -36, -35, -34, -34, -33, -32, -31, -31, -32, -32, -31, -31, -30, -29, -28, -28, -27, -27, -26, -26, -24, -22, -21, -19, -16, -14, -10,  -7,  -3,   1,   6,   8,   7,   8,  11,  15,  18,  19,  21,  23,  25,  26,  26,  28,  30,  31,  33,  36,  39,  41,  43,  44,  46,  47,  48,  48,  49,  50,  53,  55,  56,  57,  57,  57,  57,  58,  58,  59,  60,  60,  60,  61,  62,  63,  63,  64,  64,  64,  64,  63,  63,  63,  62,  60,  59,  58,  57,  56,  55,  54,  53,  52,  52,  51,  51,  50,  49,  48,  48,  47,  45,  43,  43,  42,  43,  42,  41,  40,  38,  36,  33,  31,  30,  31,  31,  31,  30,  28,  26,  24,  23,  22,  20,  19,  18,  18,  18,  17,  17,  17,  17,  18,  18,  17,  16,  15,  14,  13,  12,  12,  11,   9,   8,   7,   8,   7,   6,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -3,  -4,  -5,  -7,  -7,  -6,  -5,  -5,  -7,  -8, -10, -12, -13, -14, -15, -15, -15, -15, -15, -15, -16, -16, -16, -17, -17, -17, -18, -17, -18, -18, -19, -20, -20, -19, -20, -20, -20, -20, -20, -19, -19, -20, -20, -19, -18, -18, -19, -19, -18, -18, -17, -17, -16, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -13, -14, -14, -11,  -8,  -5,  -5,  -5,  -5,  -5,  -4,  -3,  -2,  -2,  -1,   0,   3,   3,   3,   3,   5,   6,   5,   2,   2,   4,   5,   5,   6,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   8,   8,   8,   8,   8,   9,   9,   8,   8,   8,   7,   7,   6,   6,   6,   6,   6,   6,   5,
+  /*  68.0 */   5,   4,   4,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,   4,   4,   4,   4,   4,   5,   6,   8,   8,   7,   7,   8,   9,   9,   9,   9,   8,   8,   8,   7,   7,   6,   5,   4,   3,   2,   0,  -2,  -2,  -2,  -2,  -3,  -5,  -6,  -6,  -7,  -8,  -8,  -9, -10, -10, -11, -12, -15, -17, -18, -19, -21, -23, -25, -26, -28, -29, -30, -31, -32, -32, -33, -33, -34, -35, -35, -35, -35, -35, -35, -34, -34, -33, -32, -30, -30, -30, -30, -31, -31, -30, -28, -26, -26, -26, -26, -25, -24, -23, -22, -21, -19, -17, -14, -12,  -9,  -5,  -2,   0,   2,   3,   6,   9,  12,  14,  17,  19,  22,  24,  25,  25,  25,  25,  26,  27,  29,  32,  34,  36,  38,  40,  42,  43,  45,  46,  47,  48,  49,  51,  54,  56,  56,  56,  56,  57,  58,  59,  59,  59,  59,  60,  59,  59,  60,  61,  61,  62,  62,  62,  62,  61,  61,  60,  59,  59,  58,  57,  56,  55,  54,  52,  51,  51,  51,  50,  49,  49,  48,  48,  48,  47,  45,  44,  42,  41,  41,  41,  41,  41,  39,  36,  32,  30,  30,  31,  32,  31,  29,  28,  27,  25,  24,  23,  22,  21,  20,  19,  18,  18,  18,  18,  18,  17,  16,  15,  14,  13,  11,  11,  11,  10,  10,   9,   9,   8,   6,   5,   4,   3,   2,   1,  -0,  -1,  -1,  -2,  -3,  -3,  -4,  -5,  -6,  -7,  -7,  -6,  -6,  -7,  -9, -11, -12, -13, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -16, -16, -16, -15, -16, -17, -17, -18, -18, -17, -17, -16, -16, -16, -17, -16, -16, -16, -17, -16, -16, -16, -16, -17, -16, -17, -16, -16, -15, -15, -15, -14, -13, -12, -12, -11, -11, -11, -11, -12, -14, -15, -16, -14, -10,  -7,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -2,  -1,   1,   1,   1,   2,   1,   0,   1,   2,   3,   3,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   7,   7,   7,   8,   8,   8,   8,   7,   6,   6,   6,   6,   6,   6,   6,   6,   6,   5,
+  /*  69.0 */   4,   3,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   3,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   5,   6,   7,   7,   7,   7,   5,   4,   3,   1,  -2,  -4,  -5,  -6,  -6,  -6,  -6,  -6,  -7,  -8,  -8,  -9,  -9,  -9,  -8,  -8,  -9, -11, -12, -14, -15, -17, -18, -19, -20, -21, -22, -23, -26, -28, -30, -30, -31, -31, -32, -31, -31, -31, -32, -32, -32, -32, -31, -31, -30, -29, -28, -28, -28, -28, -28, -28, -27, -25, -24, -23, -24, -23, -22, -21, -21, -19, -17, -14, -11,  -9,  -6,  -4,  -2,  -0,   1,   1,   4,   9,  13,  15,  16,  18,  21,  24,  25,  26,  27,  26,  24,  23,  24,  26,  29,  31,  34,  36,  38,  39,  41,  42,  44,  45,  47,  48,  50,  51,  53,  55,  54,  55,  57,  59,  59,  60,  61,  61,  60,  59,  59,  59,  59,  59,  60,  60,  61,  61,  60,  60,  60,  59,  58,  58,  57,  56,  54,  52,  52,  51,  51,  50,  49,  49,  49,  48,  47,  47,  46,  45,  44,  43,  43,  41,  40,  39,  39,  39,  38,  37,  35,  33,  32,  31,  31,  30,  29,  28,  27,  26,  25,  24,  22,  21,  20,  19,  18,  17,  17,  16,  15,  14,  13,  13,  12,  11,  10,  10,   9,   8,   8,   7,   6,   4,   4,   3,   2,   1,   0,  -0,  -1,  -2,  -3,  -3,  -4,  -5,  -5,  -5,  -6,  -7,  -7,  -8,  -8,  -9, -10, -11, -11, -12, -12, -12, -12, -12, -13, -13, -13, -14, -14, -14, -15, -15, -15, -14, -14, -15, -16, -16, -15, -15, -15, -14, -14, -15, -15, -16, -17, -17, -16, -16, -15, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -12, -12, -12, -11, -10, -10, -10, -12, -13, -14, -14, -13, -11,  -7,  -5,  -5,  -6,  -5,  -4,  -4,  -3,  -2,  -2,  -1,   0,   0,   0,   0,   1,   1,   1,   2,   2,   3,   3,   4,   4,   3,   3,   3,   4,   4,   4,   4,   4,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,
+  /*  70.0 */   3,   2,   2,   2,   1,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,  -0,  -0,  -1,  -1,  -2,  -2,  -2,  -1,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9, -10, -11, -11, -12, -13, -13, -14, -15, -17, -18, -18, -18, -18, -18, -19, -20, -22, -25, -27, -28, -28, -28, -28, -29, -29, -28, -28, -28, -28, -28, -27, -27, -26, -25, -25, -25, -26, -26, -26, -25, -25, -24, -22, -21, -21, -20, -20, -18, -17, -15, -13, -11,  -8,  -5,  -2,  -1,   1,   3,   4,   4,   5,   7,  10,  14,  16,  19,  21,  23,  24,  26,  27,  28,  28,  27,  26,  26,  27,  30,  32,  35,  36,  38,  39,  40,  42,  43,  44,  46,  47,  48,  50,  52,  54,  55,  55,  56,  57,  57,  57,  56,  57,  58,  58,  57,  56,  57,  58,  60,  59,  59,  59,  59,  59,  59,  59,  58,  57,  56,  55,  54,  52,  51,  51,  51,  51,  50,  50,  49,  48,  47,  47,  46,  45,  45,  44,  43,  43,  42,  41,  40,  39,  39,  38,  37,  35,  33,  31,  30,  28,  28,  27,  25,  24,  25,  24,  23,  21,  20,  19,  18,  17,  16,  15,  14,  14,  13,  12,  11,  10,  10,   9,   8,   7,   6,   6,   5,   4,   3,   2,   2,   1,  -0,  -1,  -2,  -2,  -2,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -8,  -8,  -9,  -9,  -9, -10, -10, -10, -10, -10, -11, -11, -11, -12, -13, -13, -14, -14, -14, -14, -15, -14, -14, -13, -13, -13, -12, -12, -13, -14, -14, -15, -15, -15, -15, -15, -15, -15, -14, -13, -12, -11, -10,  -9,  -9, -10, -11, -11, -11, -11, -11, -11, -10, -10,  -9,  -8,  -9,  -9,  -9, -10, -10, -10,  -9,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,
+  /*  71.0 */   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   2,   1,   1,   1,   0,  -0,  -0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -3,  -2,  -3,  -4,  -5,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -4,  -5,  -7,  -9, -10, -11, -12, -12, -13, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -18, -19, -21, -23, -24, -25, -25, -25, -25, -25, -26, -26, -25, -24, -23, -23, -22, -21, -20, -19, -20, -21, -21, -21, -20, -20, -19, -18, -18, -17, -16, -15, -13, -12, -10,  -8,  -6,  -4,  -2,  -0,   1,   2,   3,   3,   5,   8,  10,  12,  14,  16,  17,  19,  22,  24,  26,  26,  27,  28,  29,  28,  28,  28,  30,  32,  34,  36,  37,  38,  39,  40,  41,  42,  43,  45,  46,  47,  49,  50,  51,  52,  53,  53,  54,  55,  54,  54,  54,  54,  53,  53,  55,  56,  56,  57,  57,  56,  57,  57,  57,  57,  58,  57,  57,  56,  56,  55,  54,  54,  53,  53,  52,  52,  51,  50,  49,  48,  47,  46,  46,  45,  44,  44,  43,  42,  42,  41,  40,  40,  39,  37,  35,  33,  31,  29,  28,  28,  27,  25,  24,  23,  22,  21,  20,  19,  17,  17,  16,  16,  15,  15,  13,  12,  11,  10,   9,   9,   8,   8,   8,   7,   6,   5,   3,   3,   2,   2,   1,   1,   0,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -9,  -9, -10, -10, -10, -10,  -9,  -9, -10, -11, -11, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -14, -14, -15, -15, -15, -14, -14, -13, -13, -12, -12, -12, -13, -13, -12, -11, -10,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -0,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   3,   3,   3,   2,   2,   3,
+  /*  72.0 */   2,   2,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,  -0,  -0,  -0,   0,   0,   1,   0,   0,  -0,  -1,  -1,  -2,  -2,  -3,  -3,  -4,  -6,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -7,  -6,  -5,  -4,  -5,  -7, -10, -11, -10, -10, -10,  -9, -10, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -21, -22, -22, -22, -22, -23, -23, -22, -21, -20, -19, -18, -18, -18, -17, -16, -17, -17, -17, -16, -15, -14, -13, -13, -12, -11, -10,  -9,  -8,  -8,  -6,  -4,  -1,   1,   1,   2,   4,   7,   9,  10,  11,  12,  13,  14,  16,  17,  19,  21,  23,  25,  26,  26,  25,  26,  27,  28,  30,  32,  34,  35,  36,  37,  37,  38,  39,  39,  40,  41,  42,  43,  44,  46,  47,  48,  49,  49,  50,  50,  51,  51,  51,  51,  53,  54,  53,  53,  53,  53,  54,  55,  55,  54,  54,  54,  54,  54,  54,  53,  53,  53,  53,  53,  53,  53,  52,  52,  52,  52,  51,  51,  50,  49,  49,  48,  47,  46,  45,  44,  43,  42,  42,  41,  41,  41,  40,  38,  36,  34,  33,  31,  29,  27,  26,  24,  23,  22,  21,  20,  19,  18,  18,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   8,   8,   7,   7,   6,   6,   5,   4,   3,   3,   2,   2,   2,   1,  -1,  -2,  -2,  -3,  -3,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -9, -10, -11, -11, -11, -11, -12, -12, -12, -13, -13, -13, -13, -13, -13, -14, -14, -14, -13, -13, -13, -13, -12, -13, -14, -14, -13, -12, -12, -11, -10, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,
+  /*  73.0 */   2,   2,   2,   1,   1,   0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -1,  -1,  -1,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -7,  -8, -10, -10, -10, -10,  -9,  -9,  -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -20, -20, -20, -20, -20, -21, -20, -19, -18, -17, -16, -15, -15, -14, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -10,  -8,  -6,  -5,  -5,  -3,  -1,   2,   3,   4,   6,   9,  12,  13,  13,  14,  14,  14,  15,  16,  17,  19,  22,  24,  22,  20,  20,  21,  22,  23,  24,  26,  29,  31,  32,  34,  36,  37,  37,  37,  37,  38,  39,  40,  41,  42,  42,  43,  45,  46,  47,  48,  48,  49,  49,  49,  48,  48,  49,  50,  50,  49,  50,  51,  51,  51,  52,  53,  53,  52,  51,  51,  50,  51,  51,  51,  51,  51,  51,  50,  50,  50,  50,  49,  49,  49,  49,  49,  48,  48,  47,  46,  46,  45,  44,  43,  43,  42,  42,  41,  40,  37,  35,  33,  31,  30,  29,  28,  26,  24,  23,  22,  21,  20,  19,  18,  17,  17,  16,  16,  15,  14,  14,  13,  12,  10,  10,   9,   8,   7,   7,   6,   5,   4,   3,   3,   2,   2,   2,   2,   2,   1,  -0,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -9, -10, -10, -11, -11, -12, -12, -12, -11, -11, -11, -11, -11, -12, -13, -13, -13, -12, -12, -12, -12, -13, -13, -13, -12, -11, -11, -11, -10, -10, -10, -10,  -9,  -9,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -1,  -1,  -1,  -1,  -0,  -0,  -0,  -0,   0,   0,   1,   1,   1,   1,   1,   2,   2,   2,   2,   1,   1,   2,   2,   1,   1,   1,   1,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,
+  /*  74.0 */   1,   1,   2,   2,   1,   1,   1,   1,   2,   2,   2,   3,   2,   2,   1,   1,   0,   0,  -0,  -1,  -3,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -4,  -4,  -5,  -6,  -7,  -7,  -8,  -9,  -9,  -9, -10, -10, -10,  -9,  -9,  -7,  -6,  -5,  -5,  -7,  -9,  -9,  -9,  -9, -10, -10, -11, -12, -12, -13, -14, -15, -15, -15, -16, -16, -17, -17, -17, -17, -17, -17, -17, -16, -16, -15, -14, -13, -12, -12, -12, -11, -10, -10, -10, -10, -10, -10,  -9,  -8,  -8,  -7,  -6,  -5,  -4,  -3,  -1,   1,   3,   6,   8,  11,  13,  14,  15,  15,  16,  16,  16,  17,  18,  20,  21,  20,  19,  18,  18,  20,  21,  22,  24,  25,  27,  29,  30,  32,  33,  34,  34,  35,  35,  36,  37,  37,  38,  38,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  47,  47,  47,  47,  47,  48,  48,  48,  48,  48,  49,  49,  50,  50,  51,  50,  49,  49,  48,  48,  48,  48,  48,  48,  48,  48,  47,  47,  47,  47,  47,  46,  45,  45,  45,  45,  45,  45,  44,  43,  43,  42,  41,  40,  39,  39,  38,  36,  35,  33,  31,  29,  28,  26,  25,  24,  23,  22,  21,  20,  19,  19,  18,  17,  16,  15,  15,  14,  13,  12,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   4,   3,   3,   2,   2,   2,   2,   1,   0,  -1,  -2,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -9,  -9,  -9,  -9, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, -11, -11, -11, -11, -11, -11, -10, -11, -11, -11, -10, -10,  -9,  -9,  -9,  -8,  -8,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -0,   0,   1,   0,   0,   0,   1,   1,   1,   1,   2,   3,   3,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
+  /*  75.0 */   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   2,   2,   1,   1,   0,  -0,  -1,  -1,  -2,  -2,  -2,  -3,  -4,  -4,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -6,  -6,  -7,  -7,  -8,  -8,  -9,  -9,  -9,  -9,  -8,  -7,  -6,  -4,  -3,  -4,  -6,  -8, -10, -10, -11, -11, -11, -12, -12, -12, -12, -11, -11, -12, -12, -12, -13, -13, -14, -14, -14, -14, -14, -14, -13, -12, -12, -11, -10,  -9,  -9,  -8,  -7,  -7,  -7,  -6,  -5,  -4,  -3,  -2,  -1,   1,   2,   4,   6,   7,   7,   6,   5,   7,   9,  12,  14,  15,  16,  17,  18,  18,  19,  19,  19,  19,  18,  18,  17,  17,  18,  19,  20,  21,  22,  23,  25,  27,  28,  30,  31,  32,  32,  33,  33,  34,  35,  36,  36,  36,  37,  37,  38,  38,  39,  40,  41,  42,  42,  43,  44,  45,  46,  46,  45,  45,  46,  47,  47,  47,  45,  44,  44,  44,  45,  45,  46,  47,  47,  47,  46,  46,  46,  46,  46,  46,  45,  45,  45,  45,  44,  44,  44,  44,  44,  44,  44,  44,  43,  42,  42,  41,  41,  40,  40,  40,  40,  40,  37,  35,  33,  31,  30,  29,  28,  27,  26,  24,  23,  22,  21,  21,  20,  19,  18,  18,  17,  16,  15,  14,  13,  12,  11,  10,   9,   9,   8,   7,   7,   6,   5,   4,   4,   3,   3,   2,   2,   2,   3,   3,   2,   1,  -1,  -2,  -2,  -3,  -3,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -9,  -8,  -7,  -7,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,   0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   1,   1,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
+  /*  76.0 */   2,   2,   2,   1,  -0,  -1,  -0,   0,   0,   0,   1,   1,   1,   1,   1,   1,   0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -7,  -6,  -5,  -5,  -5,  -5,  -5,  -6,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -9, -10, -10, -10, -10, -10, -10, -10,  -9,  -9,  -8,  -8,  -7,  -7,  -6,  -6,  -6,  -5,  -5,  -4,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -0,   1,   2,   3,   4,   5,   6,   8,  10,  11,  12,  13,  14,  14,  15,  15,  16,  16,  17,  17,  17,  18,  19,  19,  20,  21,  21,  22,  24,  25,  27,  28,  29,  30,  31,  31,  32,  32,  32,  33,  33,  34,  35,  36,  37,  38,  38,  39,  40,  41,  41,  42,  43,  44,  45,  46,  47,  47,  46,  44,  42,  40,  39,  38,  38,  38,  38,  38,  38,  39,  41,  42,  42,  43,  43,  44,  45,  44,  44,  43,  43,  43,  42,  42,  43,  43,  43,  43,  43,  43,  43,  43,  42,  42,  41,  41,  40,  39,  40,  40,  39,  37,  34,  32,  31,  30,  30,  29,  28,  27,  26,  25,  24,  23,  22,  21,  20,  19,  18,  18,  17,  16,  15,  14,  13,  12,  11,  11,  10,  10,   9,   8,   8,   7,   7,   6,   5,   5,   5,   4,   4,   3,   3,   2,   2,   2,   2,   2,   1,   1,  -0,  -1,  -1,  -2,  -3,  -3,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -7,  -7,  -7,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -6,  -5,  -5,  -4,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,  -0,  -0,  -0,  -0,  -1,  -0,   0,   1,   1,   1,   0,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,   1,   1,   2,
+  /*  77.0 */   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   3,   2,   2,   1,   1,   0,  -0,  -1,  -1,  -1,  -1,  -2,  -2,  -3,  -3,  -2,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -6,  -6,  -6,  -5,  -4,  -3,  -3,  -3,  -3,  -4,  -5,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -7,  -7,  -8,  -8,  -8,  -8,  -8,  -8,  -7,  -7,  -6,  -7,  -7,  -7,  -7,  -6,  -6,  -5,  -4,  -3,  -3,  -2,  -3,  -3,  -2,  -1,  -0,   1,   3,   5,   6,   6,   7,   7,   8,   9,   9,   9,   9,   9,  10,  10,  11,  11,  13,  14,  16,  17,  19,  20,  21,  22,  23,  23,  24,  24,  24,  25,  26,  27,  27,  28,  29,  30,  30,  31,  31,  31,  31,  32,  33,  33,  34,  35,  35,  36,  37,  38,  38,  39,  40,  41,  42,  42,  43,  43,  43,  43,  42,  41,  39,  36,  33,  31,  31,  33,  33,  33,  33,  33,  34,  36,  38,  39,  40,  40,  41,  42,  42,  42,  42,  41,  41,  41,  41,  42,  41,  41,  41,  42,  42,  41,  41,  40,  40,  40,  39,  38,  38,  37,  35,  33,  32,  30,  30,  29,  29,  28,  28,  27,  26,  25,  24,  23,  22,  21,  20,  19,  18,  17,  17,  16,  15,  15,  14,  13,  13,  12,  11,  11,  10,   9,   9,   8,   7,   7,   6,   6,   5,   5,   5,   4,   4,   3,   3,   2,   2,   1,   1,   1,   1,   1,   1,   0,  -1,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -7,  -7,  -7,  -7,  -7,  -7,  -7,  -6,  -5,  -5,  -5,  -4,  -4,  -4,  -4,  -4,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -0,  -0,   0,   0,  -0,  -0,  -1,  -0,   0,   0,   1,   1,   1,   2,   2,   1,   1,   0,   0,   0,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   4,   3,   3,   3,   4,   4,   4,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,
+  /*  78.0 */   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   4,   4,   3,   3,   2,   2,   1,   0,   0,  -0,  -0,  -0,  -1,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -6,  -6,  -6,  -6,  -6,  -6,  -6,  -5,  -5,  -5,  -4,  -4,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -5,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -2,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   1,   2,   4,   5,   6,   8,   9,  10,  10,  10,  10,   9,   9,   9,   9,  10,  12,  14,  16,  17,  18,  19,  20,  22,  23,  24,  25,  26,  26,  27,  28,  28,  29,  29,  30,  30,  30,  30,  31,  31,  31,  32,  32,  33,  33,  33,  34,  34,  34,  35,  35,  36,  37,  37,  38,  38,  39,  39,  39,  38,  37,  36,  35,  34,  32,  31,  30,  29,  30,  30,  31,  31,  31,  31,  31,  33,  35,  36,  36,  36,  37,  38,  39,  40,  39,  39,  38,  38,  38,  39,  39,  39,  40,  40,  40,  39,  39,  39,  39,  38,  37,  35,  34,  32,  32,  32,  31,  30,  29,  29,  29,  28,  27,  26,  24,  24,  23,  22,  21,  20,  19,  19,  18,  17,  17,  16,  16,  15,  14,  14,  13,  13,  12,  12,  11,  10,  10,   9,   9,   8,   7,   7,   7,   6,   6,   5,   5,   4,   4,   3,   3,   3,   3,   2,   1,   1,   0,  -0,  -0,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -5,  -5,  -5,  -5,  -5,  -5,  -4,  -3,  -3,  -2,  -2,  -2,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -0,   1,   2,   2,   2,   2,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   3,   3,   3,   3,   3,   2,   2,   2,   2,   3,   3,   3,
+  /*  79.0 */   3,   3,   4,   4,   4,   3,   3,   3,   3,   3,   2,   2,   2,   3,   3,   3,   3,   3,   2,   2,   2,   1,  -0,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -4,  -3,  -3,  -2,  -1,  -1,  -0,   0,   1,   1,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   0,   1,   1,   1,   0,   1,   1,   1,   2,   2,   3,   4,   5,   6,   6,   6,   5,   5,   5,   5,   6,   8,   9,  10,  11,  11,  11,  10,   8,   8,   7,   7,   7,   8,   9,  11,  12,  14,  15,  17,  18,  20,  21,  22,  23,  24,  25,  26,  26,  27,  27,  28,  28,  29,  29,  30,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  35,  35,  36,  36,  36,  37,  37,  37,  36,  35,  34,  33,  32,  31,  30,  29,  29,  28,  28,  29,  29,  30,  30,  30,  30,  31,  31,  32,  33,  34,  35,  36,  37,  37,  36,  36,  35,  36,  36,  37,  37,  37,  37,  38,  38,  39,  39,  38,  38,  37,  37,  36,  35,  35,  35,  34,  33,  32,  30,  29,  28,  28,  27,  26,  25,  24,  24,  23,  22,  22,  21,  20,  20,  19,  18,  18,  17,  17,  16,  15,  15,  14,  14,  14,  13,  13,  12,  11,  11,  10,  10,   9,   9,   8,   8,   8,   7,   7,   6,   6,   6,   5,   5,   4,   3,   3,   3,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -1,  -1,  -0,   0,   0,   1,   1,   1,   1,   1,  -0,  -1,  -2,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -2,  -1,  -1,  -1,  -1,  -1,  -1,   1,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   3,   3,   3,   3,   3,   4,   4,   3,   3,   2,   2,   2,   2,   1,   1,   0,   0,   0,   0,   1,   1,   1,   1,   2,   2,   3,   3,   3,   3,
+  /*  80.0 */   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -3,  -3,  -3,  -3,  -3,  -3,  -2,  -2,  -2,  -2,  -2,  -1,  -1,   0,   1,   2,   2,   3,   4,   4,   5,   5,   4,   4,   3,   3,   2,   2,   2,   2,   2,   3,   3,   4,   5,   5,   6,   8,   9,  10,  11,  11,  11,  10,   9,   8,   8,   8,   9,  10,  12,  13,  15,  15,  15,  15,  14,  13,  12,  10,   9,   8,   7,   7,   8,   9,  10,  11,  13,  14,  15,  17,  18,  20,  21,  22,  23,  24,  25,  26,  27,  27,  28,  28,  29,  30,  30,  31,  32,  32,  33,  33,  34,  34,  35,  35,  36,  37,  37,  37,  37,  37,  36,  36,  35,  34,  33,  33,  32,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  32,  32,  32,  32,  33,  34,  34,  35,  34,  34,  34,  34,  34,  34,  34,  34,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  33,  33,  32,  31,  30,  30,  29,  29,  29,  28,  27,  27,  26,  25,  25,  24,  24,  23,  23,  22,  22,  21,  20,  20,  19,  18,  18,  17,  17,  16,  16,  16,  15,  14,  14,  13,  13,  12,  12,  11,  11,  11,  11,  11,  10,   9,   9,   8,   8,   7,   7,   6,   6,   5,   5,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   3,   3,   2,   2,   2,   2,   1,   0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,  -0,  -0,   0,   0,  -0,  -0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -0,   0,   1,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   2,   2,   2,   1,   1,   1,   1,   1,   0,   0,   0,   0,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   3,   3,   4,   4,   4,
+  /*  81.0 */   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0,   0,   0,   0,   0,   1,   1,   1,   1,   2,   2,   3,   3,   4,   4,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   8,   8,   9,  10,  10,  11,  11,  11,  11,  11,  12,  13,  14,  15,  16,  16,  17,  16,  16,  16,  17,  17,  18,  19,  19,  19,  18,  17,  15,  14,  12,  12,  11,  12,  12,  14,  15,  16,  18,  19,  20,  21,  21,  22,  23,  23,  24,  25,  25,  26,  27,  28,  29,  29,  30,  31,  32,  33,  34,  34,  35,  35,  34,  34,  34,  35,  35,  35,  35,  35,  34,  33,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  32,  33,  33,  33,  32,  31,  31,  31,  31,  32,  32,  33,  33,  32,  32,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  30,  30,  30,  29,  29,  28,  28,  28,  28,  27,  27,  26,  26,  25,  25,  24,  24,  23,  23,  22,  21,  21,  20,  20,  19,  19,  18,  18,  18,  18,  17,  17,  16,  16,  16,  15,  15,  15,  14,  14,  14,  14,  13,  13,  12,  12,  11,  10,  10,   9,   9,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   5,   5,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   3,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   1,   1,   1,   1,   2,   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   2,   2,   3,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,
+  /*  82.0 */   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,   6,   6,   6,   7,   8,   8,   9,  10,  10,  11,  11,  11,  11,  11,  12,  12,  13,  13,  13,  14,  14,  14,  15,  16,  17,  17,  18,  18,  19,  19,  20,  21,  21,  21,  21,  21,  20,  20,  19,  19,  19,  19,  18,  17,  17,  16,  16,  16,  16,  16,  17,  17,  18,  18,  18,  19,  19,  19,  20,  20,  21,  22,  24,  25,  26,  27,  29,  29,  30,  31,  31,  31,  32,  32,  32,  32,  32,  32,  31,  31,  30,  30,  29,  29,  28,  27,  27,  27,  27,  27,  28,  29,  30,  31,  31,  32,  32,  31,  31,  30,  30,  29,  29,  29,  29,  30,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  32,  31,  31,  31,  30,  30,  29,  28,  28,  27,  27,  26,  26,  26,  26,  25,  24,  24,  23,  23,  22,  22,  22,  22,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  18,  18,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  15,  14,  13,  12,  12,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,   9,   9,   9,   8,   8,   8,   8,   8,   8,   8,   7,   7,   8,   8,   8,   8,   8,   7,   6,   6,   5,   5,   5,   5,   5,   5,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   5,   5,   5,   5,   5,   4,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   4,   4,   4,   4,   4,   4,   4,   4,
+  /*  83.0 */   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,  10,  10,  11,  11,  12,  12,  12,  13,  13,  14,  14,  15,  15,  15,  16,  16,  16,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  19,  19,  19,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  21,  21,  21,  22,  22,  22,  23,  23,  24,  24,  25,  25,  26,  26,  27,  28,  28,  29,  29,  29,  30,  30,  30,  30,  30,  30,  30,  30,  29,  29,  29,  28,  28,  28,  28,  28,  28,  28,  28,  27,  27,  27,  27,  28,  28,  28,  29,  29,  29,  29,  29,  29,  29,  28,  28,  28,  28,  28,  28,  28,  28,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  25,  25,  25,  25,  24,  24,  24,  23,  23,  23,  22,  22,  22,  21,  21,  21,  21,  20,  20,  19,  19,  19,  18,  18,  18,  18,  17,  17,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  14,  13,  13,  12,  12,  12,  11,  11,  11,  11,  11,  10,  10,  10,  10,   9,   9,   8,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   7,   7,   7,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   4,   5,   5,   6,   7,   7,   8,   8,   7,   6,   6,   5,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   5,   5,   5,   5,
+  /*  84.0 */   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  17,  17,  17,  18,  18,  19,  19,  19,  19,  20,  20,  20,  20,  20,  21,  21,  21,  21,  22,  22,  22,  22,  22,  23,  23,  23,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  26,  26,  26,  26,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  23,  23,  23,  23,  23,  22,  22,  22,  22,  21,  21,  21,  21,  20,  20,  20,  19,  19,  19,  19,  18,  18,  18,  18,  17,  17,  17,  16,  16,  16,  16,  15,  15,  15,  15,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  12,  12,  12,  12,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,   9,   9,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,   6,   7,   7,   8,   8,   9,   9,   8,   8,   8,   8,   7,   7,   7,   7,   7,   7,   6,   6,   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,
+  /*  85.0 */   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  19,  19,  19,  19,  20,  20,  20,  20,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  23,  23,  23,  24,  24,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  25,  25,  24,  24,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  23,  23,  23,  23,  22,  22,  22,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,   8,   8,   8,   7,   7,   7,   7,   7,   8,   8,   9,   9,   9,  10,  10,   9,   9,   9,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   6,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,
+  /*  86.0 */   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  20,  20,  20,  21,  21,  22,  22,  22,  23,  23,  23,  23,  22,  22,  22,  21,  21,  21,  21,  20,  20,  20,  20,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  22,  22,  21,  21,  21,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,   9,   9,   9,   9,   9,   9,   9,   9,   9,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  10,   9,   9,   8,   8,   8,   8,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   7,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,   9,   9,
+  /*  87.0 */  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  20,  20,  20,  20,  20,  20,  21,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  11,  11,  10,  10,   9,   9,   9,   9,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,
+  /*  88.0 */  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  13,  13,  13,  13,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  13,  13,  13,  13,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,
+  /*  89.0 */  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,
+  /*  90.0 */  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14
+};
+#endif  // HEIGHTGRID_H_INCLUDED_
index 9407ea4e860e0fd45a7a56a691e439a3a26ec151..3ef03195bf57f4d7c1f6b42f2e053d317f8542cd 100644 (file)
 #include "defs.h"
 #include "filterdefs.h"
 #include "grtcirc.h"
+#include "interpolate.h"
 #include <cstdlib>
 
 #if FILTERS_ENABLED
 #define MYNAME "Interpolate filter"
 
-static char* opt_interval = nullptr;
-static unsigned int interval = 0;
-static char* opt_dist = nullptr;
-static double dist = 0;
-static char* opt_route = nullptr;
-
-static
-arglist_t interpfilt_args[] = {
-  {
-    "time", &opt_interval, "Time interval in seconds", nullptr,
-    ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_INT,
-    "0", nullptr, nullptr
-  },
-  {
-    "distance", &opt_dist, "Distance interval in miles or kilometers",
-    nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    "route", &opt_route, "Interpolate routes instead", nullptr,
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static void
-interpfilt_process()
+void InterpolateFilter::process()
 {
   queue* backuproute = nullptr;
   queue* elem, *tmp, *elem2, *tmp2;
@@ -116,8 +91,9 @@ interpfilt_process()
                      frac,
                      &wpt_new->latitude,
                      &wpt_new->longitude);
-            if (altitude1 != unknown_alt && wpt->altitude != unknown_alt)
+            if (altitude1 != unknown_alt && wpt->altitude != unknown_alt) {
               wpt_new->altitude = altitude1 + frac * (wpt->altitude - altitude1);
+            }
             if (opt_route) {
               route_add_wpt(rte_new, wpt_new);
             } else {
@@ -145,8 +121,9 @@ interpfilt_process()
                        frac,
                        &wpt_new->latitude,
                        &wpt_new->longitude);
-              if (altitude1 != unknown_alt && wpt->altitude != unknown_alt)
+              if (altitude1 != unknown_alt && wpt->altitude != unknown_alt) {
                 wpt_new->altitude = altitude1 + frac * (wpt->altitude - altitude1);
+              }
               if (opt_route) {
                 route_add_wpt(rte_new, wpt_new);
               } else {
@@ -172,8 +149,7 @@ interpfilt_process()
   xfree(backuproute);
 }
 
-static void
-interpfilt_init(const char*)
+void InterpolateFilter::init()
 {
 
   char* fm;
@@ -194,11 +170,4 @@ interpfilt_init(const char*)
   }
 }
 
-filter_vecs_t interpolatefilt_vecs = {
-  interpfilt_init,
-  interpfilt_process,
-  nullptr,
-  nullptr,
-  interpfilt_args
-};
 #endif // FILTERS_ENABLED
diff --git a/interpolate.h b/interpolate.h
new file mode 100644 (file)
index 0000000..017c060
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+    Interpolate filter
+
+    Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef INTERPOLATE_H_INCLUDED_
+#define INTERPOLATE_H_INCLUDED_
+
+#include "defs.h"    // for ARG_NOMINMAX, arglist_t, ARGTYPE_BEGIN_EXCL, ARG...
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class InterpolateFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+  char* opt_interval = nullptr;
+  unsigned int interval = 0;
+  char* opt_dist = nullptr;
+  double dist = 0;
+  char* opt_route = nullptr;
+
+  arglist_t args[4] = {
+    {
+      "time", &opt_interval, "Time interval in seconds", nullptr,
+      ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_INT,
+      "0", nullptr, nullptr
+    },
+    {
+      "distance", &opt_dist, "Distance interval in miles or kilometers",
+      nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      "route", &opt_route, "Interpolate routes instead", nullptr,
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+};
+#endif // FILTERS_ENABLED
+#endif // INTERPOLATE_H_INCLUDED_
diff --git a/main.cc b/main.cc
index 195df504733e2a954dfb0988fb7ea520b20d474d..62a632d046e4660d00b78d58c4074ae46c8ad573 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -204,7 +204,7 @@ main(int argc, char* argv[])
   int argn;
   ff_vecs_t* ivecs = nullptr;
   ff_vecs_t* ovecs = nullptr;
-  filter_vecs_t* fvecs = nullptr;
+  Filter* filter = nullptr;
   QString fname;
   QString ofname;
   const char* ivec_opts = nullptr;
@@ -487,17 +487,13 @@ main(int argc, char* argv[])
       break;
     case 'x':
       optarg = FETCH_OPTARG;
-      fvecs = find_filter_vec(CSTR(optarg), &fvec_opts);
+      filter = find_filter_vec(CSTR(optarg), &fvec_opts);
 
-      if (fvecs) {
-        if (fvecs->f_init) {
-          fvecs->f_init(fvec_opts);
-        }
-        fvecs->f_process();
-        if (fvecs->f_deinit) {
-          fvecs->f_deinit();
-        }
-        free_filter_vec(fvecs);
+      if (filter) {
+        filter->init();
+        filter->process();
+        filter->deinit();
+        free_filter_vec(filter);
       }  else {
         fatal("Unknown filter '%s'\n",qPrintable(optarg));
       }
index 3dc342d3bbb5e41f7beb619b9c9b473b39bb4fcc..aad78ce8f8f6dc2cab7f394813ba1b5b82f7c52b 100644 (file)
 
 #include "defs.h"
 #include "filterdefs.h"
+#include "nukedata.h"
 
 #if FILTERS_ENABLED
 #define MYNAME "nukedata"
 
-static char* nukewpts, *nuketrks, *nukertes;
-
-static
-arglist_t nuke_args[] = {
-  {
-    "waypoints", &nukewpts, "Remove all waypoints from data stream",
-    "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  } ,
-  {
-    "tracks", &nuketrks, "Remove all tracks from data stream",
-    "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  } ,
-  {
-    "routes", &nukertes, "Remove all routes from data stream",
-    "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  } ,
-  ARG_TERMINATOR
-};
-
-static void
-nuke_process(void)
+void NukeDataFilter::process(void)
 {
   if (*nukewpts != '0') {
     waypt_flush_all();
@@ -59,12 +40,4 @@ nuke_process(void)
   }
 }
 
-filter_vecs_t nuke_vecs = {
-  nullptr,
-  nuke_process,
-  nullptr,
-  nullptr,
-  nuke_args
-};
-
 #endif
diff --git a/nukedata.h b/nukedata.h
new file mode 100644 (file)
index 0000000..8d00fd0
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+
+    nukedata: remove all (waypoint|tracks|routes) from the stream.
+
+    Copyright (C) 2005 Robert Lipe   robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef NUKEDATA_H_INCLUDED_
+#define NUKEDATA_H_INCLUDED_
+
+#include "defs.h"    // for ARGTYPE_BOOL, ARG_NOMINMAX, arglist_t, ARG_TERMI...
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class NukeDataFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void process() override;
+
+private:
+  char* nukewpts;
+  char* nuketrks;
+  char* nukertes;
+
+  arglist_t args[4] = {
+    {
+      "waypoints", &nukewpts, "Remove all waypoints from data stream",
+      "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "tracks", &nuketrks, "Remove all tracks from data stream",
+      "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "routes", &nukertes, "Remove all routes from data stream",
+      "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+};
+
+#endif
+#endif // NUKEDATA_H_INCLUDED_
index 98dec26e4065423bff8f9df324296aaaea87b977..670ac4c73026f5409c5df9ed42903f22bb752f10 100644 (file)
  */
 #include "defs.h"
 #include "filterdefs.h"
+#include "polygon.h"
 #include <cstdio>
 
 #if FILTERS_ENABLED
 #define MYNAME "Polygon filter"
 
-static char* polyfileopt = nullptr;
-static char* exclopt = nullptr;
-
 /*
  * This test for insideness is essentially an odd/even test.  The
  * traditional (simple) implementation of the odd/even test counts
@@ -103,28 +101,10 @@ static char* exclopt = nullptr;
 #define BEGIN_HOR   32
 #define UP          64
 
-typedef struct {
-  unsigned short state;
-  unsigned short override;
-} extra_data;
-
-static
-arglist_t polygon_args[] = {
-  {
-    "file", &polyfileopt,  "File containing vertices of polygon",
-    nullptr, ARGTYPE_FILE | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  {
-    "exclude", &exclopt, "Exclude points inside the polygon",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static void polytest(double lat1, double lon1,
-                     double lat2, double lon2,
-                     double wlat, double wlon,
-                     unsigned short* state, int first, int last)
+void PolygonFilter::polytest(double lat1, double lon1,
+                             double lat2, double lon2,
+                             double wlat, double wlon,
+                             unsigned short* state, int first, int last)
 {
 
   if (lat1 == wlat) {
@@ -233,8 +213,7 @@ static void polytest(double lat1, double lon1,
 
 #define BADVAL 999999
 
-static void
-polygon_process()
+void PolygonFilter::process()
 {
   queue* elem, * tmp;
   Waypoint* waypointp;
@@ -271,7 +250,7 @@ polygon_process()
     } else if (lat1 != BADVAL && lon1 != BADVAL &&
                lat2 != BADVAL && lon2 != BADVAL) {
 #if NEWQ
-      foreach(Waypoint* waypointp, waypt_list) {
+      foreach (Waypoint* waypointp, waypt_list) {
 #else
       QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
         waypointp = (Waypoint*)elem;
@@ -320,7 +299,7 @@ polygon_process()
   gbfclose(file_in);
 
 #if NEWQ
-  foreach(Waypoint* wp, waypt_list) {
+  foreach (Waypoint* wp, waypt_list) {
 #else
   QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
     Waypoint* wp = (Waypoint*) elem;
@@ -340,23 +319,4 @@ polygon_process()
   }
 }
 
-static void
-polygon_init(const char*)
-{
-  /* do nothing */
-}
-
-static void
-polygon_deinit()
-{
-  /* do nothing */
-}
-
-filter_vecs_t polygon_vecs = {
-  polygon_init,
-  polygon_process,
-  polygon_deinit,
-  nullptr,
-  polygon_args
-};
 #endif // FILTERS_ENABLED
diff --git a/polygon.h b/polygon.h
new file mode 100644 (file)
index 0000000..7dde6e7
--- /dev/null
+++ b/polygon.h
@@ -0,0 +1,67 @@
+/*
+    Inside/Outside polygon filter
+
+    Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef POLYGON_H_INCLUDED_
+#define POLYGON_H_INCLUDED_
+
+#include "defs.h"    // for ARG_NOMINMAX, arglist_t, ARGTYPE_BOOL, ARGTYPE_FILE
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class PolygonFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void process() override;
+
+private:
+  char* polyfileopt = nullptr;
+  char* exclopt = nullptr;
+
+  typedef struct {
+    unsigned short state;
+    unsigned short override;
+  } extra_data;
+
+  arglist_t args[3] = {
+    {
+      "file", &polyfileopt,  "File containing vertices of polygon",
+      nullptr, ARGTYPE_FILE | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    {
+      "exclude", &exclopt, "Exclude points inside the polygon",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  void polytest(double lat1, double lon1,
+                double lat2, double lon2,
+                double wlat, double wlon,
+                unsigned short* state, int first, int last);
+
+};
+#endif // FILTERS_ENABLED
+#endif // POLYGON_H_INCLUDED_
index 82fd98cb7c35f1e10da06f551b02f827cdd7e9e0..778a503a1df8894c89de5d2ce110a027edd1c0e0 100644 (file)
 #include "defs.h"
 #include "filterdefs.h"
 #include "grtcirc.h"
+#include "position.h"
 #include <cmath>
 #include <cstdlib>
 
 #if FILTERS_ENABLED
 
-#ifndef M_PI
-#  define M_PI 3.14159265358979323846
-#endif
-
-static route_head* cur_rte = nullptr;
-
-static double pos_dist;
-static double max_diff_time;
-static char* distopt = nullptr;
-static char* timeopt = nullptr;
-static char* purge_duplicates = nullptr;
-static int check_time;
-
-typedef struct {
-  double distance;
-} extra_data;
-
-static
-arglist_t position_args[] = {
-  {
-    "distance", &distopt, "Maximum positional distance",
-    nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  {
-    "all", &purge_duplicates,
-    "Suppress all points close to other points",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "time", &timeopt, "Maximum time in seconds beetween two points",
-    nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static double
-gc_distance(double lat1, double lon1, double lat2, double lon2)
+double PositionFilter::gc_distance(double lat1, double lon1, double lat2, double lon2)
 {
   return gcdist(
            RAD(lat1),
@@ -74,8 +39,7 @@ gc_distance(double lat1, double lon1, double lat2, double lon2)
 }
 
 /* tear through a waypoint queue, processing points by distance */
-static void
-position_runqueue(queue* q, int nelems, int qtype)
+void PositionFilter::position_runqueue(queue* q, int nelems, int qtype)
 {
   queue* elem, * tmp;
   Waypoint** comp;
@@ -165,8 +129,7 @@ position_runqueue(queue* q, int nelems, int qtype)
   }
 }
 
-static void
-position_process_any_route(const route_head* rh, int type)
+void PositionFilter::position_process_any_route(const route_head* rh, int type)
 {
   int i = rh->rte_waypt_ct;
 
@@ -178,42 +141,32 @@ position_process_any_route(const route_head* rh, int type)
 
 }
 
-static void
-position_process_rte(const route_head* rh)
+void PositionFilter::position_process_rte(const route_head* rh)
 {
   position_process_any_route(rh, rtedata);
 }
 
-static void
-position_process_trk(const route_head* rh)
+void PositionFilter::position_process_trk(const route_head* rh)
 {
   position_process_any_route(rh, trkdata);
 }
 
-static void
-position_noop_w(const Waypoint*)
-{
-}
-
-static void
-position_noop_t(const route_head*)
+void PositionFilter::process()
 {
-}
+  RteHdFunctor<PositionFilter> position_process_rte_f(this, &PositionFilter::position_process_rte);
+  RteHdFunctor<PositionFilter> position_process_trk_f(this, &PositionFilter::position_process_trk);
 
-static void position_process()
-{
   int i = waypt_count();
 
   if (i) {
     position_runqueue(&waypt_head, i, wptdata);
   }
 
-  route_disp_all(position_process_rte, position_noop_t, position_noop_w);
-  track_disp_all(position_process_trk, position_noop_t, position_noop_w);
+  route_disp_all(position_process_rte_f, nullptr, nullptr);
+  track_disp_all(position_process_trk_f, nullptr, nullptr);
 }
 
-static void
-position_init(const char*)
+void PositionFilter::init()
 {
   char* fm;
 
@@ -236,17 +189,4 @@ position_init(const char*)
   }
 }
 
-static void
-position_deinit()
-{
-}
-
-filter_vecs_t position_vecs = {
-  position_init,
-  position_process,
-  position_deinit,
-  nullptr,
-  position_args
-};
-
 #endif // FILTERS_ENABLED
diff --git a/position.h b/position.h
new file mode 100644 (file)
index 0000000..e7477aa
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+    Distance Between Points Filter(s)
+
+    Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef POSITION_H_INCLUDED_
+#define POSITION_H_INCLUDED_
+
+#include "defs.h"    // for route_head (ptr only), ARG_NOMINMAX, ARGTYPE_FLOAT
+#include "filter.h"  // for Filter
+#include "queue.h"   // for queue
+
+#if FILTERS_ENABLED
+
+class PositionFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+  route_head* cur_rte = nullptr;
+
+  double pos_dist;
+  double max_diff_time;
+  char* distopt = nullptr;
+  char* timeopt = nullptr;
+  char* purge_duplicates = nullptr;
+  int check_time;
+
+  typedef struct {
+    double distance;
+  } extra_data;
+
+  arglist_t args[4] = {
+    {
+      "distance", &distopt, "Maximum positional distance",
+      nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    {
+      "all", &purge_duplicates,
+      "Suppress all points close to other points",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "time", &timeopt, "Maximum time in seconds beetween two points",
+      nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  double gc_distance(double lat1, double lon1, double lat2, double lon2);
+  void position_runqueue(queue* q, int nelems, int qtype);
+  void position_process_any_route(const route_head* rh, int type);
+  void position_process_rte(const route_head* rh);
+  void position_process_trk(const route_head* rh);
+
+};
+#endif // FILTERS_ENABLED
+#endif // POSITION_H_INCLUDED_
index 8f13029c2fb82871de1431c348ec617688174c8c..fdab0bb42218f581f2031dc7b803bf4b86588e2a 100644 (file)
--- a/queue.cc
+++ b/queue.cc
@@ -43,180 +43,3 @@ dequeue(queue* element)
   QUEUE_INIT(element);
   return element;
 }
-
-/*
- * The following sorting code was derived from linked-list mergesort
- * sample code by Simon Tatham, code obtained from:
- *  http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
- * Modified for use with gpsbabel's queues by Paul Fox, October 2006.
- *
- * Original description and copyright messages follow...
- */
-
-/*
- * Demonstration code for sorting a linked list.
- *
- * The algorithm used is Mergesort, because that works really well
- * on linked lists, without requiring the O(N) extra space it needs
- * when you do it on arrays.
- *
- * ...
- */
-
-/*
- * This file is copyright 2001 Simon Tatham.
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-
-void
-sortqueue(queue* qh, int (*cmp)(const queue*, const queue*))
-{
-
-  queue* p, *q, *e, *tail, *oldhead, *list;
-  int insize, nmerges, psize, qsize, i;
-
-  /*
-   * Special case: if `list' is empty, we're done.
-   */
-  if (QUEUE_EMPTY(qh)) {
-    return;
-  }
-
-  /*
-   * The algorithm doesn't really want the extra list head
-   * element.   So remove the list head for now.  Put it back later.
-   */
-
-  list = QUEUE_FIRST(qh);
-  dequeue(qh);
-
-  insize = 1;
-
-  while (true) {
-    p = list;
-    oldhead = list;     /* only used for circular linkage */
-    list = nullptr;
-    tail = nullptr;
-
-    nmerges = 0;  /* count number of merges we do in this pass */
-
-    while (p) {
-      nmerges++;       /* there exists a merge to be done */
-      /* step `insize' places along from p */
-      q = p;
-      psize = 0;
-      for (i = 0; i < insize; i++) {
-        psize++;
-        q = (q->next == oldhead ? nullptr : q->next);
-        if (!q) {
-          break;
-        }
-      }
-
-      /* if q hasn't fallen off end, we have
-       * two lists to merge */
-      qsize = insize;
-
-      /* now we have two lists; merge them */
-      while (psize > 0 || (qsize > 0 && q)) {
-
-        /* decide whether next element of
-         * merge comes from p or q
-         */
-        if (psize == 0) {
-          /* p is empty; e must come from q. */
-          e = q;
-          q = q->next;
-          qsize--;
-          if (q == oldhead) {
-            q = nullptr;
-          }
-        } else if (qsize == 0 || !q) {
-          /* q is empty; e must come from p. */
-          e = p;
-          p = p->next;
-          psize--;
-          if (p == oldhead) {
-            p = nullptr;
-          }
-        } else if (cmp(p,q) <= 0) {
-          /* First element of p is
-           * lower (or same); e must
-           * come from p.
-           */
-          e = p;
-          p = p->next;
-          psize--;
-          if (p == oldhead) {
-            p = nullptr;
-          }
-        } else {
-          /* First element of q is
-           * lower; e must come from
-           * q.
-           */
-          e = q;
-          q = q->next;
-          qsize--;
-          if (q == oldhead) {
-            q = nullptr;
-          }
-        }
-
-        /* add the next element to the merged list */
-        if (tail) {
-          tail->next = e;
-        } else {
-          list = e;
-        }
-
-        /* Maintain reverse pointers in a
-         * doubly linked list.  */
-        e->prev = tail;
-
-        tail = e;
-      }
-
-      /* now p has stepped `insize' places
-       * along, and q has too */
-      p = q;
-    }
-    tail->next = list;
-    list->prev = tail;
-
-    /* If we have done only one merge, we're finished.
-     * Allow for nmerges==0, the empty list case.
-     */
-    if (nmerges <= 1) {
-
-      /* Put the list head back at the start of the list */
-      ENQUEUE_TAIL(list, qh);
-      return;
-
-    }
-
-    /* Otherwise repeat, merging lists twice the size */
-    insize *= 2;
-  }
-}
diff --git a/queue.h b/queue.h
index 863d046a1ebba283a08430736ffd6f8e50c5a3ae..1d0aaad96ff1ce4387f038b457d722908fcd4ce5 100644 (file)
--- a/queue.h
+++ b/queue.h
@@ -29,7 +29,7 @@ typedef struct queue {
 void enqueue(queue* new_el, queue* old);
 queue* dequeue(queue* element);
 
-void sortqueue(queue* qh, int (*cmp)(const queue*, const queue*));
+//void sortqueue(queue* qh, int (*cmp)(const queue*, const queue*)); /* template */
 
 #define QUEUE_INIT(head) (head)->next = ((head)->prev = head)
 #define QUEUE_FIRST(head) ((head)->next)
@@ -60,4 +60,182 @@ void sortqueue(queue* qh, int (*cmp)(const queue*, const queue*));
                (tmp) = QUEUE_NEXT(element), \
                (element) != (listhead); \
                (element) = (tmp))
+
+/*
+ * The following sorting code was derived from linked-list mergesort
+ * sample code by Simon Tatham, code obtained from:
+ *  http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
+ * Modified for use with gpsbabel's queues by Paul Fox, October 2006.
+ *
+ * Original description and copyright messages follow...
+ */
+
+/*
+ * Demonstration code for sorting a linked list.
+ *
+ * The algorithm used is Mergesort, because that works really well
+ * on linked lists, without requiring the O(N) extra space it needs
+ * when you do it on arrays.
+ *
+ * ...
+ */
+
+/*
+ * This file is copyright 2001 Simon Tatham.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+template <typename T>
+void
+sortqueue(queue* qh, T cmp)
+{
+
+  queue* p, *q, *e, *tail, *oldhead, *list;
+  int insize, nmerges, psize, qsize, i;
+
+  /*
+   * Special case: if `list' is empty, we're done.
+   */
+  if (QUEUE_EMPTY(qh)) {
+    return;
+  }
+
+  /*
+   * The algorithm doesn't really want the extra list head
+   * element.   So remove the list head for now.  Put it back later.
+   */
+
+  list = QUEUE_FIRST(qh);
+  dequeue(qh);
+
+  insize = 1;
+
+  while (true) {
+    p = list;
+    oldhead = list;     /* only used for circular linkage */
+    list = nullptr;
+    tail = nullptr;
+
+    nmerges = 0;  /* count number of merges we do in this pass */
+
+    while (p) {
+      nmerges++;       /* there exists a merge to be done */
+      /* step `insize' places along from p */
+      q = p;
+      psize = 0;
+      for (i = 0; i < insize; i++) {
+        psize++;
+        q = (q->next == oldhead ? nullptr : q->next);
+        if (!q) {
+          break;
+        }
+      }
+
+      /* if q hasn't fallen off end, we have
+       * two lists to merge */
+      qsize = insize;
+
+      /* now we have two lists; merge them */
+      while (psize > 0 || (qsize > 0 && q)) {
+
+        /* decide whether next element of
+         * merge comes from p or q
+         */
+        if (psize == 0) {
+          /* p is empty; e must come from q. */
+          e = q;
+          q = q->next;
+          qsize--;
+          if (q == oldhead) {
+            q = nullptr;
+          }
+        } else if (qsize == 0 || !q) {
+          /* q is empty; e must come from p. */
+          e = p;
+          p = p->next;
+          psize--;
+          if (p == oldhead) {
+            p = nullptr;
+          }
+        } else if (cmp(p,q) <= 0) {
+          /* First element of p is
+           * lower (or same); e must
+           * come from p.
+           */
+          e = p;
+          p = p->next;
+          psize--;
+          if (p == oldhead) {
+            p = nullptr;
+          }
+        } else {
+          /* First element of q is
+           * lower; e must come from
+           * q.
+           */
+          e = q;
+          q = q->next;
+          qsize--;
+          if (q == oldhead) {
+            q = nullptr;
+          }
+        }
+
+        /* add the next element to the merged list */
+        if (tail) {
+          tail->next = e;
+        } else {
+          list = e;
+        }
+
+        /* Maintain reverse pointers in a
+         * doubly linked list.  */
+        e->prev = tail;
+
+        tail = e;
+      }
+
+      /* now p has stepped `insize' places
+       * along, and q has too */
+      p = q;
+    }
+    tail->next = list;
+    list->prev = tail;
+
+    /* If we have done only one merge, we're finished.
+     * Allow for nmerges==0, the empty list case.
+     */
+    if (nmerges <= 1) {
+
+      /* Put the list head back at the start of the list */
+      ENQUEUE_TAIL(list, qh);
+      return;
+
+    }
+
+    /* Otherwise repeat, merging lists twice the size */
+    insize *= 2;
+  }
+}
 #endif  // QUEUE_H_INCLUDED_
index 3d29df98e08b178b6c2286f58d92e24b7ab333a9..ceafde756cd9ef1dcefa8a536b340313fe505e7b 100644 (file)
--- a/radius.cc
+++ b/radius.cc
 #include "defs.h"
 #include "filterdefs.h"
 #include "grtcirc.h"
+#include "radius.h"
 #include <cstdio>
 #include <cstdlib>
 
 #if FILTERS_ENABLED
 
-#ifndef M_PI
-#  define M_PI 3.14159265358979323846
-#endif
-
-static double pos_dist;
-static char* distopt = nullptr;
-static char* latopt = nullptr;
-static char* lonopt = nullptr;
-static char* exclopt = nullptr;
-static char* nosort = nullptr;
-static char* maxctarg = nullptr;
-static char* routename = nullptr;
-static int maxct;
-
-static Waypoint* home_pos;
-
-typedef struct {
-  double distance;
-} extra_data;
-
-static
-arglist_t radius_args[] = {
-  {
-    "lat", &latopt,       "Latitude for center point (D.DDDDD)",
-    nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  {
-    "lon", &lonopt,       "Longitude for center point (D.DDDDD)",
-    nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  {
-    "distance", &distopt, "Maximum distance from center",
-    nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
-  },
-  {
-    "exclude", &exclopt,  "Exclude points close to center",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "nosort", &nosort,    "Inhibit sort by distance to center",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "maxcount", &maxctarg,"Output no more than this number of points",
-    nullptr, ARGTYPE_INT, "1", nullptr, nullptr
-  },
-  {
-    "asroute", &routename,"Put resulting waypoints in route of this name",
-    nullptr, ARGTYPE_STRING, nullptr, nullptr, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static double
-gc_distance(double lat1, double lon1, double lat2, double lon2)
+double RadiusFilter::gc_distance(double lat1, double lon1, double lat2, double lon2)
 {
   return gcdist(
            RAD(lat1),
@@ -90,8 +37,7 @@ gc_distance(double lat1, double lon1, double lat2, double lon2)
          );
 }
 
-static int
-dist_comp(const void* a, const void* b)
+int RadiusFilter::dist_comp(const void* a, const void* b)
 {
   const Waypoint* x1 = *(Waypoint**)a;
   const Waypoint* x2 = *(Waypoint**)b;
@@ -108,8 +54,7 @@ dist_comp(const void* a, const void* b)
 
 }
 
-static void
-radius_process()
+void RadiusFilter::process()
 {
 #if !NEWQ
   queue* elem, * tmp;
@@ -120,7 +65,7 @@ radius_process()
   queue temp_head;
   route_head* rte_head = nullptr;
 #if NEWQ
-  foreach(Waypoint* waypointp, waypt_list) {
+  foreach (Waypoint* waypointp, waypt_list) {
 #else
   QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
     Waypoint* waypointp = (Waypoint*)elem;
@@ -158,7 +103,7 @@ radius_process()
    */
 
 #if NEWQ
-  foreach(Waypoint* wp, waypt_list) {
+  foreach (Waypoint* wp, waypt_list) {
 #else
   QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
     Waypoint* wp = (Waypoint*) elem;
@@ -202,8 +147,7 @@ radius_process()
   xfree(comp);
 }
 
-static void
-radius_init(const char*)
+void RadiusFilter::init()
 {
   char* fm;
 
@@ -234,19 +178,11 @@ radius_init(const char*)
   }
 }
 
-static void
-radius_deinit()
+void RadiusFilter::deinit()
 {
   if (home_pos) {
     xfree(home_pos);
   }
 }
 
-filter_vecs_t radius_vecs = {
-  radius_init,
-  radius_process,
-  radius_deinit,
-  nullptr,
-  radius_args
-};
 #endif // FILTERS_ENABLED
diff --git a/radius.h b/radius.h
new file mode 100644 (file)
index 0000000..f96e9ec
--- /dev/null
+++ b/radius.h
@@ -0,0 +1,95 @@
+/*
+    Radius Filter
+
+    Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef RADIUS_H_INCLUDED_
+#define RADIUS_H_INCLUDED_
+
+#include "defs.h"    // for ARG_NOMINMAX, ARGTYPE_FLOAT, ARGTYPE_REQUIRED
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class RadiusFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+  void deinit() override;
+
+private:
+  double pos_dist;
+  char* distopt = nullptr;
+  char* latopt = nullptr;
+  char* lonopt = nullptr;
+  char* exclopt = nullptr;
+  char* nosort = nullptr;
+  char* maxctarg = nullptr;
+  char* routename = nullptr;
+  int maxct;
+
+  Waypoint* home_pos;
+
+  typedef struct {
+    double distance;
+  } extra_data;
+
+  arglist_t args[8] = {
+    {
+      "lat", &latopt,       "Latitude for center point (D.DDDDD)",
+      nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    {
+      "lon", &lonopt,       "Longitude for center point (D.DDDDD)",
+      nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    {
+      "distance", &distopt, "Maximum distance from center",
+      nullptr, ARGTYPE_FLOAT | ARGTYPE_REQUIRED, ARG_NOMINMAX, nullptr
+    },
+    {
+      "exclude", &exclopt,  "Exclude points close to center",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "nosort", &nosort,    "Inhibit sort by distance to center",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "maxcount", &maxctarg,"Output no more than this number of points",
+      nullptr, ARGTYPE_INT, "1", nullptr, nullptr
+    },
+    {
+      "asroute", &routename,"Put resulting waypoints in route of this name",
+      nullptr, ARGTYPE_STRING, nullptr, nullptr, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  double gc_distance(double lat1, double lon1, double lat2, double lon2);
+  static int dist_comp(const void* a, const void* b);
+
+};
+#endif // FILTERS_ENABLED
+#endif // RADIUS_H_INCLUDED_
diff --git a/reference/swapdata.gpx b/reference/swapdata.gpx
new file mode 100644 (file)
index 0000000..15bf56d
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <metadata>
+    <time>2018-06-07T15:44:59.297Z</time>
+    <bounds minlat="45.000000000" minlon="0.000000000" maxlat="47.100000000" maxlon="2.100000000"/>
+  </metadata>
+  <wpt lat="45.000000000" lon="0.000000000">
+    <name>WPT001</name>
+    <cmt>WPT001</cmt>
+    <desc>WPT001</desc>
+  </wpt>
+  <wpt lat="45.100000000" lon="0.100000000">
+    <name>WPT002</name>
+    <cmt>WPT002</cmt>
+    <desc>WPT002</desc>
+  </wpt>
+  <rte>
+    <rtept lat="46.000000000" lon="1.000000000">
+      <name>RPT001</name>
+    </rtept>
+    <rtept lat="46.100000000" lon="1.100000000">
+      <name>RPT002</name>
+    </rtept>
+  </rte>
+  <trk>
+    <trkseg>
+      <trkpt lat="47.000000000" lon="2.000000000"/>
+      <trkpt lat="47.100000000" lon="2.100000000"/>
+    </trkseg>
+  </trk>
+</gpx>
diff --git a/reference/swapdata~gpx.gpx b/reference/swapdata~gpx.gpx
new file mode 100644 (file)
index 0000000..43b7e92
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <metadata>
+    <time>1970-01-01T00:00:00Z</time>
+    <bounds minlat="0.000000000" minlon="45.000000000" maxlat="2.100000000" maxlon="47.100000000"/>
+  </metadata>
+  <wpt lat="0.000000000" lon="45.000000000">
+    <name>WPT001</name>
+    <cmt>WPT001</cmt>
+    <desc>WPT001</desc>
+  </wpt>
+  <wpt lat="0.100000000" lon="45.100000000">
+    <name>WPT002</name>
+    <cmt>WPT002</cmt>
+    <desc>WPT002</desc>
+  </wpt>
+  <rte>
+    <rtept lat="1.000000000" lon="46.000000000">
+      <name>RPT001</name>
+    </rtept>
+    <rtept lat="1.100000000" lon="46.100000000">
+      <name>RPT002</name>
+    </rtept>
+  </rte>
+  <trk>
+    <trkseg>
+      <trkpt lat="2.000000000" lon="47.000000000"/>
+      <trkpt lat="2.100000000" lon="47.100000000"/>
+    </trkseg>
+  </trk>
+</gpx>
index a564b366961c611bc8b91c657897e49f15700cae..b8202be4798afd849f9a4962d06a10ab5e24cdc8 100644 (file)
  */
 #include "defs.h"
 #include "filterdefs.h"
+#include "reverse_route.h"
 
 #if FILTERS_ENABLED
 
 #define MYNAME "Route reversal filter"
 
-static int prev_new_trkseg;
-
-static
-arglist_t reverse_route_args[] = {
-  ARG_TERMINATOR
-};
-
 /*
  * reverse_route_wpt fixes up the waypoint flag new_trkseg
  */
-static void reverse_route_wpt(const Waypoint* waypointp)
+void ReverseRouteFilter::reverse_route_wpt(const Waypoint* waypointp)
 {
 
   /* Cast away const-ness */
@@ -48,22 +42,22 @@ static void reverse_route_wpt(const Waypoint* waypointp)
   prev_new_trkseg = curr_new_trkseg;
 }
 
-static void
-reverse_route_head(const route_head* rte)
+void ReverseRouteFilter::reverse_route_head(const route_head* rte)
 {
   route_reverse(rte);
   prev_new_trkseg = 1;
 }
 
-static void
-reverse_route_process()
+void ReverseRouteFilter::process()
 {
-  track_disp_all(reverse_route_head, nullptr, reverse_route_wpt);
-  route_disp_all(reverse_route_head, nullptr, nullptr);
+  WayptFunctor<ReverseRouteFilter> reverse_route_wpt_f(this, &ReverseRouteFilter::reverse_route_wpt);
+  RteHdFunctor<ReverseRouteFilter> reverse_route_head_f(this, &ReverseRouteFilter::reverse_route_head);
+
+  track_disp_all(reverse_route_head_f, nullptr, reverse_route_wpt_f);
+  route_disp_all(reverse_route_head_f, nullptr, nullptr);
 }
 
-static void
-reverse_route_init(const char*)
+void ReverseRouteFilter::init()
 {
   switch (global_opts.objective) {
   case rtedata:
@@ -76,17 +70,4 @@ reverse_route_init(const char*)
   }
 }
 
-static void
-reverse_route_deinit()
-{
-  /* do nothing */
-}
-
-filter_vecs_t reverse_route_vecs = {
-  reverse_route_init,
-  reverse_route_process,
-  reverse_route_deinit,
-  nullptr,
-  reverse_route_args
-};
 #endif
diff --git a/reverse_route.h b/reverse_route.h
new file mode 100644 (file)
index 0000000..257edd2
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    Route reversal filter.
+
+    Copyright (C) 2003 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#include "defs.h"    // for Waypoint (ptr only), arglist_t, route_head (ptr ...
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class ReverseRouteFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+  int prev_new_trkseg;
+  arglist_t args[1] = {
+    ARG_TERMINATOR
+  };
+
+  void reverse_route_wpt(const Waypoint* waypointp);
+  void reverse_route_head(const route_head* rte);
+
+};
+#endif
index 0ed14418b9dcfaf3cac18f681f0ce59f0f3828ee..631c218d13590ddf8bff5c16419a9303bc38c2c8 100644 (file)
--- a/route.cc
+++ b/route.cc
@@ -22,8 +22,8 @@
 #include "session.h"
 #include <cstdio>
 
-static queue my_route_head;
-static queue my_track_head;
+queue my_route_head;
+queue my_track_head;
 static int rte_head_ct;
 static int rte_waypts;
 static int trk_head_ct;
@@ -254,18 +254,9 @@ track_del_wpt(route_head* rte, Waypoint* wpt)
 }
 
 void
-route_disp(const route_head* rh, waypt_cb cb)
+route_disp(const route_head* rh, std::nullptr_t /* wc */)
 {
-  queue* elem, *tmp;
-  if (!cb)  {
-    return;
-  }
-  QUEUE_FOR_EACH(&rh->waypoint_list, elem, tmp) {
-    Waypoint* waypointp;
-    waypointp = (Waypoint*) elem;
-    (*cb)(waypointp);
-  }
-
+// wc == nullptr
 }
 
 void
@@ -279,23 +270,6 @@ route_reverse(const route_head* rte_hd)
   }
 }
 
-static void
-common_disp_all(queue* qh, route_hdr rh, route_trl rt, waypt_cb wc)
-{
-  queue* elem, *tmp;
-  QUEUE_FOR_EACH(qh, elem, tmp) {
-    const route_head* rhp;
-    rhp = (route_head*) elem;
-    if (rh) {
-      (*rh)(rhp);
-    }
-    route_disp(rhp, wc);
-    if (rt) {
-      (*rt)(rhp);
-    }
-  }
-}
-
 static void
 common_disp_session(const session_t* se, queue* qh, route_hdr rh, route_trl rt, waypt_cb wc)
 {
@@ -315,24 +289,12 @@ common_disp_session(const session_t* se, queue* qh, route_hdr rh, route_trl rt,
   }
 }
 
-void
-route_disp_all(route_hdr rh, route_trl rt, waypt_cb wc)
-{
-  common_disp_all(&my_route_head, rh, rt, wc);
-}
-
 void
 route_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc)
 {
   common_disp_session(se, &my_route_head, rh, rt, wc);
 }
 
-void
-track_disp_all(route_hdr rh, route_trl rt, waypt_cb wc)
-{
-  common_disp_all(&my_track_head, rh, rt, wc);
-}
-
 void
 track_disp_session(const session_t* se, route_hdr rh, route_trl rt, waypt_cb wc)
 {
index eb79836676875f858f21dd291670bd211ef3e962..61fe33243328cbe47d7e2ef81d034a2e3322a8ac 100644 (file)
 #include "defs.h"
 #include "filterdefs.h"
 #include "grtcirc.h"
+#include "smplrout.h"
 #include <cstdlib>
 
+#if FILTERS_ENABLED
 #define MYNAME "simplify"
 
 #define sqr(a) ((a)*(a))
 
-static int count = 0;
-static double totalerror = 0;
-static double error = 0;
-
-static char* countopt;
-static char* erroropt;
-static char* xteopt;
-static char* lenopt;
-static char* relopt;
-static void (*waypt_del_fnp)(route_head* rte, Waypoint* wpt);
-
-static
-arglist_t routesimple_args[] = {
-  {
-    "count", &countopt,  "Maximum number of points in route",
-    nullptr, ARGTYPE_INT | ARGTYPE_BEGIN_REQ | ARGTYPE_BEGIN_EXCL, "1", nullptr, nullptr
-  },
-  {
-    "error", &erroropt, "Maximum error", nullptr,
-    ARGTYPE_STRING | ARGTYPE_END_REQ | ARGTYPE_END_EXCL, "0", nullptr, nullptr
-  },
-  {
-    "crosstrack", &xteopt, "Use cross-track error (default)", nullptr,
-    ARGTYPE_BOOL | ARGTYPE_BEGIN_EXCL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "length", &lenopt, "Use arclength error", nullptr,
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "relative", &relopt, "Use relative error", nullptr,
-    ARGTYPE_BOOL | ARGTYPE_END_EXCL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-struct xte_intermed;
-
-struct xte {
-  double distance;
-  int ordinal;
-  struct xte_intermed* intermed;
-};
-
-struct xte_intermed {
-  struct xte* xte_rec;
-  struct xte_intermed* next;
-  struct xte_intermed* prev;
-  const Waypoint* wpt;
-};
-
-static void
-free_xte(struct xte* xte_rec)
+void SimplifyRouteFilter::free_xte(struct xte* xte_rec)
 {
   xfree(xte_rec->intermed);
 }
 
 #define HUGEVAL 2000000000
 
-static struct xte_intermed* tmpprev = nullptr;
-static int xte_count = 0;
-static const route_head* cur_rte = nullptr;
-static struct xte* xte_recs = nullptr;
-
-static void
-routesimple_waypt_pr(const Waypoint* wpt)
+void SimplifyRouteFilter::routesimple_waypt_pr(const Waypoint* wpt)
 {
   if (!cur_rte) {
     return;
@@ -148,8 +92,7 @@ routesimple_waypt_pr(const Waypoint* wpt)
   xte_count++;
 }
 
-static void
-compute_xte(struct xte* xte_rec)
+void SimplifyRouteFilter::compute_xte(struct xte* xte_rec)
 {
   const Waypoint* wpt3 = xte_rec->intermed->wpt;
   const Waypoint* wpt1 = nullptr;
@@ -209,9 +152,7 @@ compute_xte(struct xte* xte_rec)
   }
 }
 
-
-static int
-compare_xte(const void* a, const void* b)
+int SimplifyRouteFilter::compare_xte(const void* a, const void* b)
 {
   double distdiff = ((struct xte*)a)->distance -
                     ((struct xte*)b)->distance;
@@ -241,8 +182,7 @@ compare_xte(const void* a, const void* b)
   return 0;
 }
 
-static void
-routesimple_head(const route_head* rte)
+void SimplifyRouteFilter::routesimple_head(const route_head* rte)
 {
   cur_rte = nullptr;
   /* build array of XTE/wpt xref records */
@@ -265,8 +205,7 @@ routesimple_head(const route_head* rte)
 
 }
 
-static void
-shuffle_xte(struct xte* xte_rec)
+void SimplifyRouteFilter::shuffle_xte(struct xte* xte_rec)
 {
   struct xte tmp_xte;
   while (xte_rec > xte_recs && compare_xte(xte_rec, xte_rec-1) < 0) {
@@ -300,8 +239,7 @@ shuffle_xte(struct xte* xte_rec)
   }
 }
 
-static void
-routesimple_tail(const route_head* rte)
+void SimplifyRouteFilter::routesimple_tail(const route_head* rte)
 {
   int i;
   if (!cur_rte) {
@@ -321,9 +259,9 @@ routesimple_tail(const route_head* rte)
     xte_recs[i].intermed->xte_rec = xte_recs+i;
   }
   // Ensure totalerror starts with the distance between first and second points
-  // and not the zero-init.  From a June 25, 2014  thread titled "Simplify 
+  // and not the zero-init.  From a June 25, 2014  thread titled "Simplify
   // Filter: GPSBabel removes one trackpoint..."  I never could repro it it
-  // with the sample data, so there is no automated test case, but Steve's 
+  // with the sample data, so there is no automated test case, but Steve's
   // fix is "obviously" right here.
   if (xte_count >= 1) {
     totalerror = xte_recs[xte_count-1].distance;
@@ -372,18 +310,20 @@ routesimple_tail(const route_head* rte)
   xfree(xte_recs);
 }
 
-static void
-routesimple_process()
+void SimplifyRouteFilter::process()
 {
+  WayptFunctor<SimplifyRouteFilter> routesimple_waypt_pr_f(this, &SimplifyRouteFilter::routesimple_waypt_pr);
+  RteHdFunctor<SimplifyRouteFilter> routesimple_head_f(this, &SimplifyRouteFilter::routesimple_head);
+  RteHdFunctor<SimplifyRouteFilter> routesimple_tail_f(this, &SimplifyRouteFilter::routesimple_tail);
+
   waypt_del_fnp = route_del_wpt;
-  route_disp_all(routesimple_head, routesimple_tail, routesimple_waypt_pr);
+  route_disp_all(routesimple_head_f, routesimple_tail_f, routesimple_waypt_pr_f);
 
   waypt_del_fnp = track_del_wpt;
-  track_disp_all(routesimple_head, routesimple_tail, routesimple_waypt_pr);
+  track_disp_all(routesimple_head_f, routesimple_tail_f, routesimple_waypt_pr_f);
 }
 
-static void
-routesimple_init(const char*)
+void SimplifyRouteFilter::init()
 {
   count = 0;
 
@@ -410,16 +350,4 @@ routesimple_init(const char*)
   }
 }
 
-static void
-routesimple_deinit()
-{
-  /* do nothing */
-}
-
-filter_vecs_t routesimple_vecs = {
-  routesimple_init,
-  routesimple_process,
-  routesimple_deinit,
-  nullptr,
-  routesimple_args
-};
+#endif // FILTERS_ENABLED
diff --git a/smplrout.h b/smplrout.h
new file mode 100644 (file)
index 0000000..95ecceb
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    Route / track simplification filter
+
+    Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+/* The following comments are from an email I wrote to Paul Fox in November
+ * 2005 in an attempt to explain how the cross track error minimization method
+ * works  (RLP 2005):
+ *
+ * It's pretty simple, really: for each triplet of vertices A-B-C, we compute
+ * how much cross-track error we'd introduce by going straight from A to C
+ * (the maximum cross-track error for that segment is the height of the
+ * triangle ABC, measured between vertex B and edge AC.)  If we need to remove
+ * 40 points, we just sort the points by that metric and remove the 40
+ * smallest ones.
+ *
+ * It's actually a little more complicated than that, because removing a
+ * point changes the result for its two nearest neighbors.  When we remove
+ * one, we recompute the neighbors and then sort them back into the list
+ * at their new locations.
+ *
+ * As you can see, this hasn't been shown to be an optimal algorithm.  After
+ * all, removing one high-xte point might create two very low-xte neighbors
+ * that more than make up for the high xte of the original point.  I believe
+ * the optimal algorithm would be NP-complete, but I haven't proven it.  This
+ * is really more of a heuristic than anything, but it seems to work well for
+ * the routes I've fed it.
+ *
+ * Not in that email was an explanation of how the pathlength-based calculation
+ * works: instead of computing the height of the triangle, we just compute
+ * the difference in pathlength from taking the direct route.  This case,
+ * too, is only a heuristic, as it's possible that a different combination or
+ * order of point removals could lead to a smaller number of points with less
+ * reduction in path length.  In the case of pathlength, error is cumulative.
+*/
+
+/*
+    History:
+
+       2008/08/20: added "relative" option, (Carsten Allefeld, carsten.allefeld@googlemail.com)
+*/
+
+#ifndef SMPLROUT_H_INCLUDED_
+#define SMPLROUT_H_INCLUDED_
+
+#include "defs.h"    // for route_head (ptr only), Waypoint (ptr only), ARGT...
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class SimplifyRouteFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+
+  int count = 0;
+  double totalerror = 0;
+  double error = 0;
+
+  char* countopt;
+  char* erroropt;
+  char* xteopt;
+  char* lenopt;
+  char* relopt;
+  void (*waypt_del_fnp)(route_head* rte, Waypoint* wpt);
+
+  arglist_t args[6] = {
+    {
+      "count", &countopt,  "Maximum number of points in route",
+      nullptr, ARGTYPE_INT | ARGTYPE_BEGIN_REQ | ARGTYPE_BEGIN_EXCL, "1", nullptr, nullptr
+    },
+    {
+      "error", &erroropt, "Maximum error", nullptr,
+      ARGTYPE_STRING | ARGTYPE_END_REQ | ARGTYPE_END_EXCL, "0", nullptr, nullptr
+    },
+    {
+      "crosstrack", &xteopt, "Use cross-track error (default)", nullptr,
+      ARGTYPE_BOOL | ARGTYPE_BEGIN_EXCL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "length", &lenopt, "Use arclength error", nullptr,
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "relative", &relopt, "Use relative error", nullptr,
+      ARGTYPE_BOOL | ARGTYPE_END_EXCL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  struct xte_intermed;
+
+  struct xte {
+    double distance;
+    int ordinal;
+    struct xte_intermed* intermed;
+  };
+
+  struct xte_intermed {
+    struct xte* xte_rec;
+    struct xte_intermed* next;
+    struct xte_intermed* prev;
+    const Waypoint* wpt;
+  };
+
+  void free_xte(struct xte* xte_rec);
+
+  struct xte_intermed* tmpprev = nullptr;
+  int xte_count = 0;
+  const route_head* cur_rte = nullptr;
+  struct xte* xte_recs = nullptr;
+
+  void routesimple_waypt_pr(const Waypoint* wpt);
+  void compute_xte(struct xte* xte_rec);
+  static int compare_xte(const void* a, const void* b);
+  void routesimple_head(const route_head* rte);
+  void shuffle_xte(struct xte* xte_rec);
+  void routesimple_tail(const route_head* rte);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // SMPLROUT_H_INCLUDED_
diff --git a/sort.cc b/sort.cc
index b4ff6b00c5380c8484ab78752e030a8ac9d9de7c..9c1d63449eb4e9fecee5176c1686fc60616a0d57 100644 (file)
--- a/sort.cc
+++ b/sort.cc
  */
 #include "defs.h"
 #include "filterdefs.h"
+#include "sort.h"
 #include <cstdlib>
 
 #if FILTERS_ENABLED
 
-typedef enum {
-  sm_unknown = 0,
-  sm_gcid,
-  sm_shortname,
-  sm_description,
-  sm_time
-} sort_mode_;
-
-static sort_mode_ sort_mode = sm_shortname;    /* How are we sorting these? */
-
-static char* opt_sm_gcid, *opt_sm_shortname, *opt_sm_description, *opt_sm_time;
-
-static
-arglist_t sort_args[] = {
-  {
-    "gcid", &opt_sm_gcid, "Sort by numeric geocache ID",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "shortname", &opt_sm_shortname, "Sort by waypoint short name",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "description", &opt_sm_description, "Sort by waypoint description",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "time", &opt_sm_time, "Sort by time",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static int
-sort_comp(const queue* a, const queue* b)
+int SortFilter::sort_comp(const queue* a, const queue* b)
 {
   const Waypoint* x1 = (Waypoint*)a;
   const Waypoint* x2 = (Waypoint*)b;
@@ -78,14 +45,19 @@ sort_comp(const queue* a, const queue* b)
   }
 }
 
-static void
-sort_process()
+int SortFilter::SortCompFunctor::operator()(const queue* a, const queue* b)
 {
+  return that->sort_comp(a, b);
+}
+
+void SortFilter::process()
+{
+  SortCompFunctor sort_comp(*this);
+
   sortqueue(&waypt_head, sort_comp);
 }
 
-static void
-sort_init(const char*)
+void SortFilter::init()
 {
   if (opt_sm_gcid) {
     sort_mode = sm_gcid;
@@ -101,11 +73,4 @@ sort_init(const char*)
   }
 }
 
-filter_vecs_t sort_vecs = {
-  sort_init,
-  sort_process,
-  nullptr,
-  nullptr,
-  sort_args
-};
 #endif // FILTERS_ENABLED
diff --git a/sort.h b/sort.h
new file mode 100644 (file)
index 0000000..4dd852a
--- /dev/null
+++ b/sort.h
@@ -0,0 +1,88 @@
+/*
+    Arbitrary Sorting Filter(s)
+
+    Copyright (C) 2004 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef SORT_H_INCLUDED_
+#define SORT_H_INCLUDED_
+
+#include "defs.h"    // for ARGTYPE_BOOL, ARG_NOMINMAX, arglist_t, ARG_TERMI...
+#include "filter.h"  // for Filter
+#include "queue.h"   // for queue
+
+#if FILTERS_ENABLED
+
+class SortFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+
+private:
+  typedef enum {
+    sm_unknown = 0,
+    sm_gcid,
+    sm_shortname,
+    sm_description,
+    sm_time
+  } sort_mode_;
+
+  sort_mode_ sort_mode = sm_shortname; /* How are we sorting these? */
+
+  char* opt_sm_gcid, *opt_sm_shortname, *opt_sm_description, *opt_sm_time;
+
+  arglist_t args[5] = {
+    {
+      "gcid", &opt_sm_gcid, "Sort by numeric geocache ID",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "shortname", &opt_sm_shortname, "Sort by waypoint short name",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "description", &opt_sm_description, "Sort by waypoint description",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "time", &opt_sm_time, "Sort by time",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  int sort_comp(const queue* a, const queue* b);
+
+  class SortCompFunctor
+  {
+  public:
+    SortCompFunctor(SortFilter& obj) : that(&obj) {}
+    int operator()(const queue* a, const queue* b);
+
+  private:
+    SortFilter* that;
+  };
+
+};
+#endif // FILTERS_ENABLED
+#endif // SORT_H_INCLUDED_
index 15065f1d11659dbe03b9ce29924cd0f17ab22685..518346b9f3cc94e5b2ab51013b947b20b9a2b7ee 100644 (file)
@@ -20,6 +20,8 @@
 
  */
 
+#ifndef DATETIME_H_INCLUDED_
+#define DATETIME_H_INCLUDED_
 
 #include <ctime>
 
@@ -89,3 +91,5 @@ public:
 };
 
 } // namespace gpsbabel
+
+#endif // DATETIME_H_INCLUDED_
index a774df786906a2e5dcaefb1b0b87e8b65cbfcf56..ada7c73078b9e785d0a4965df1ca2a5e9cb6e2e8 100644 (file)
 
 #include "defs.h"
 #include "filterdefs.h"
+#include "stackfilter.h"
 #include <cstdlib>
 
 #if FILTERS_ENABLED
 
 #define MYNAME "Stack filter"
 
-static char* opt_push = nullptr;
-static char* opt_copy = nullptr;
-static char* opt_pop = nullptr;
-static char* opt_append = nullptr;
-static char* opt_discard = nullptr;
-static char* opt_replace = nullptr;
-static char* opt_swap = nullptr;
-static char* opt_depth = nullptr;
-static char* nowarn = nullptr;
-static int  warnings_enabled = 1;
-static int  swapdepth = 0;
-
-static
-arglist_t stackfilt_args[] = {
-  {
-    "push", &opt_push, "Push waypoint list onto stack", nullptr,
-    ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "pop", &opt_pop, "Pop waypoint list from stack", nullptr,
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "swap", &opt_swap, "Swap waypoint list with <depth> item on stack",
-    nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "copy", &opt_copy, "(push) Copy waypoint list", nullptr,
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "append", &opt_append, "(pop) Append list", nullptr,
-    ARGTYPE_BEGIN_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "discard", &opt_discard, "(pop) Discard top of stack",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "replace", &opt_replace, "(pop) Replace list (default)",
-    nullptr, ARGTYPE_END_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "depth", &opt_depth, "(swap) Item to use (default=1)",
-    nullptr, ARGTYPE_INT, "0", nullptr, nullptr
-  },
-  {
-    "nowarn", &nowarn, "Suppress cleanup warning", nullptr,
-    ARGTYPE_BOOL | ARGTYPE_HIDDEN, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static struct stack_elt {
-  queue waypts;
-  queue routes;
-  queue tracks;
-  unsigned int waypt_ct;
-  int route_count;
-  int track_count;
-  struct stack_elt* next;
-}* stack = nullptr;
-
-
-static void
-stackfilt_process()
+void StackFilter::process()
 {
   struct stack_elt* tmp_elt = nullptr;
   queue* elem = nullptr;
@@ -191,8 +127,7 @@ stackfilt_process()
   }
 }
 
-static void
-stackfilt_init(const char*)
+void StackFilter::init()
 {
 
   int invalid = 0;
@@ -231,14 +166,12 @@ stackfilt_init(const char*)
 
 }
 
-static void
-stackfilt_deinit()
+void StackFilter::deinit()
 {
   swapdepth = 0;
 }
 
-static void
-stackfilt_exit()
+void StackFilter::exit()
 {
   struct stack_elt* tmp_elt = nullptr;
 
@@ -254,12 +187,4 @@ stackfilt_exit()
   }
 }
 
-filter_vecs_t stackfilt_vecs = {
-  stackfilt_init,
-  stackfilt_process,
-  stackfilt_deinit,
-  stackfilt_exit,
-  stackfilt_args
-};
-
 #endif // FILTERS_ENABLED
diff --git a/stackfilter.h b/stackfilter.h
new file mode 100644 (file)
index 0000000..798a52f
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+    Stack filter
+
+    Copyright (C) 2002 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef STACKFILTER_H_INCLUDED_
+#define STACKFILTER_H_INCLUDED_
+
+#include "defs.h"    // for ARGTYPE_BOOL, ARG_NOMINMAX, ARGTYPE_BEGIN_EXCL
+#include "filter.h"  // for Filter
+#include "queue.h"   // for queue
+
+#if FILTERS_ENABLED
+
+class StackFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+  void deinit() override;
+  void exit() override;
+
+private:
+  char* opt_push = nullptr;
+  char* opt_copy = nullptr;
+  char* opt_pop = nullptr;
+  char* opt_append = nullptr;
+  char* opt_discard = nullptr;
+  char* opt_replace = nullptr;
+  char* opt_swap = nullptr;
+  char* opt_depth = nullptr;
+  char* nowarn = nullptr;
+  int  warnings_enabled = 1;
+  int  swapdepth = 0;
+
+  arglist_t args[10] = {
+    {
+      "push", &opt_push, "Push waypoint list onto stack", nullptr,
+      ARGTYPE_BEGIN_EXCL | ARGTYPE_BEGIN_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "pop", &opt_pop, "Pop waypoint list from stack", nullptr,
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "swap", &opt_swap, "Swap waypoint list with <depth> item on stack",
+      nullptr, ARGTYPE_END_EXCL | ARGTYPE_END_REQ | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "copy", &opt_copy, "(push) Copy waypoint list", nullptr,
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "append", &opt_append, "(pop) Append list", nullptr,
+      ARGTYPE_BEGIN_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "discard", &opt_discard, "(pop) Discard top of stack",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "replace", &opt_replace, "(pop) Replace list (default)",
+      nullptr, ARGTYPE_END_EXCL | ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "depth", &opt_depth, "(swap) Item to use (default=1)",
+      nullptr, ARGTYPE_INT, "0", nullptr, nullptr
+    },
+    {
+      "nowarn", &nowarn, "Suppress cleanup warning", nullptr,
+      ARGTYPE_BOOL | ARGTYPE_HIDDEN, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  struct stack_elt {
+    queue waypts;
+    queue routes;
+    queue tracks;
+    unsigned int waypt_ct;
+    int route_count;
+    int track_count;
+    struct stack_elt* next;
+  }* stack = nullptr;
+
+};
+#endif // FILTERS_ENABLED
+#endif // STACKFILTER_H_INCLUDED_
index d0ce2d3cbb5c30b4385cfc7cec581b687d154a1f..1204a5017e618c34845b55f46a1874cfd0b159fb 100644 (file)
 
 #include "defs.h"
 #include "filterdefs.h"
+#include "swapdata.h"
 
 #define MYNAME "swapdata"
 
 #if FILTERS_ENABLED
 
-static
-arglist_t swapdata_args[] = {
-  ARG_TERMINATOR
-};
-
-static void
-swapdata_cb(const Waypoint* ref)
+void SwapDataFilter::swapdata_cb(const Waypoint* ref)
 {
   Waypoint* wpt = (Waypoint*)ref;
   double x;
@@ -49,23 +44,13 @@ swapdata_cb(const Waypoint* ref)
 * %%%        global callbacks called by gpsbabel main process              %%% *
 *******************************************************************************/
 
-static void
-swapdata_process(void) /* this procedure must be present in vecs */
+void SwapDataFilter::process(void)     /* this procedure must be present in vecs */
 {
-  waypt_disp_all(swapdata_cb);
-  route_disp_all(nullptr, nullptr, swapdata_cb);
-  track_disp_all(nullptr, nullptr, swapdata_cb);
-}
+  WayptFunctor<SwapDataFilter> swapdata_cb_f(this, &SwapDataFilter::swapdata_cb);
 
-/*******************************************************************************/
-
-filter_vecs_t swapdata_vecs = {
-  nullptr,
-  swapdata_process,
-  nullptr,
-  nullptr,
-  swapdata_args
-};
+  waypt_disp_all(swapdata_cb_f);
+  route_disp_all(nullptr, nullptr, swapdata_cb_f);
+  track_disp_all(nullptr, nullptr, swapdata_cb_f);
+}
 
-/*******************************************************************************/
 #endif // FILTERS_ENABLED
diff --git a/swapdata.h b/swapdata.h
new file mode 100644 (file)
index 0000000..8e32124
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+
+    Swap data filter
+
+    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef SWAPDATA_H_INCLUDED_
+#define SWAPDATA_H_INCLUDED_
+
+#include "defs.h"    // for Waypoint (ptr only), arglist_t, ARG_TERMINATOR
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class SwapDataFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void process() override;
+
+private:
+  arglist_t args[1] = {
+    ARG_TERMINATOR
+  };
+
+  void swapdata_cb(const Waypoint* ref);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // SWAPDATA_H_INCLUDED_
diff --git a/testo.d/swap.test b/testo.d/swap.test
new file mode 100644 (file)
index 0000000..a7d855d
--- /dev/null
@@ -0,0 +1,6 @@
+
+# swapdata filter
+rm -f ${TMPDIR}/gl.gpx ${TMPDIR}/gpx.wpt
+gpsbabel -i gpx -f ${REFERENCE}/swapdata.gpx -x swap -o gpx -F ${TMPDIR}/swapdata~gpx.gpx
+compare ${REFERENCE}/swapdata~gpx.gpx ${TMPDIR}/swapdata~gpx.gpx
+
index 61345af6fb93b62c51351a10e02580b44a9f1236..5aa0fbb26c200deb52a3d39dd20198ef701cc4f4 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# this is used to generate height.h
+# this is used to generate heightgrid.h
 # which is used by height.c to compute the EMG96 geoid height
 # relative to the WGS84 ellipsoid.
 # It requires the GeographicLib utility GeoidEval.
index 5035a3e215bf764a5f6c72866685abfc5663d6ab..df0575bce28dbfd0b937a03d267bf42860643822 100644 (file)
@@ -25,6 +25,7 @@
 #include "filterdefs.h"
 #include "grtcirc.h"
 #include "strptime.h"
+#include "trackfilter.h"
 #include "xmlgeneric.h"
 #include <QtCore/QRegExp>
 #include <QtCore/QXmlStreamAttributes>
 #if FILTERS_ENABLED || MINIMAL_FILTERS
 #define MYNAME "trackfilter"
 
-#define TRACKFILTER_PACK_OPTION                "pack"
-#define TRACKFILTER_SPLIT_OPTION       "split"
-#define TRACKFILTER_SDIST_OPTION       "sdistance"
-#define TRACKFILTER_TITLE_OPTION       "title"
-#define TRACKFILTER_MERGE_OPTION       "merge"
-#define TRACKFILTER_NAME_OPTION                "name"
-#define TRACKFILTER_STOP_OPTION                "stop"
-#define TRACKFILTER_START_OPTION       "start"
-#define TRACKFILTER_MOVE_OPTION                "move"
-#define TRACKFILTER_FIX_OPTION          "fix"
-#define TRACKFILTER_COURSE_OPTION       "course"
-#define TRACKFILTER_SPEED_OPTION        "speed"
-#define TRACKFILTER_SEG2TRK_OPTION      "seg2trk"
-#define TRACKFILTER_TRK2SEG_OPTION      "trk2seg"
-#define TRACKFILTER_SEGMENT_OPTION      "segment"
-#define TRACKFILTER_FAKETIME_OPTION     "faketime"
-#define TRACKFILTER_DISCARD_OPTION      "discard"
-#define TRACKFILTER_MINPOINTS_OPTION    "minimum_points"
-
 #undef TRACKF_DBG
 
-static char* opt_merge = nullptr;
-static char* opt_pack = nullptr;
-static char* opt_split = nullptr;
-static char* opt_sdistance = nullptr;
-static char* opt_move = nullptr;
-static char* opt_title = nullptr;
-static char* opt_start = nullptr;
-static char* opt_stop = nullptr;
-static char* opt_fix = nullptr;
-static char* opt_course = nullptr;
-static char* opt_speed = nullptr;
-static char* opt_name = nullptr;
-static char* opt_seg2trk = nullptr;
-static char* opt_trk2seg = nullptr;
-static char* opt_segment = nullptr;
-static char* opt_faketime = nullptr;
-static char* opt_discard = nullptr;
-static char* opt_minpoints = nullptr;
-
-static
-arglist_t trackfilter_args[] = {
-  {
-    TRACKFILTER_MOVE_OPTION, &opt_move,
-    "Correct trackpoint timestamps by a delta", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_PACK_OPTION,  &opt_pack,
-    "Pack all tracks into one", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_SPLIT_OPTION, &opt_split,
-    "Split by date or time interval (see README)", nullptr,
-    ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_SDIST_OPTION, &opt_sdistance,
-    "Split by distance", nullptr,
-    ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_MERGE_OPTION, &opt_merge,
-    "Merge multiple tracks for the same way", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_NAME_OPTION, &opt_name,
-    "Use only track(s) where title matches given name", nullptr, ARGTYPE_STRING,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_START_OPTION, &opt_start,
-    "Use only track points after this timestamp", nullptr, ARGTYPE_INT,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_STOP_OPTION, &opt_stop,
-    "Use only track points before this timestamp", nullptr, ARGTYPE_INT,
-    ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_TITLE_OPTION, &opt_title,
-    "Basic title for new track(s)", nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_FIX_OPTION, &opt_fix,
-    "Synthesize GPS fixes (PPS, DGPS, 3D, 2D, NONE)", nullptr,
-    ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_COURSE_OPTION, &opt_course, "Synthesize course",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_SPEED_OPTION, &opt_speed, "Synthesize speed",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_SEG2TRK_OPTION, &opt_seg2trk,
-    "Split track at segment boundaries into multiple tracks",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_TRK2SEG_OPTION, &opt_trk2seg,
-    "Merge tracks inserting segment separators at boundaries",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_SEGMENT_OPTION, &opt_segment,
-    "segment tracks with abnormally long gaps",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_FAKETIME_OPTION, &opt_faketime,
-    "Add specified timestamp to each trackpoint",
-    nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_DISCARD_OPTION,  &opt_discard,
-    "Discard track points without timestamps during merge",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    TRACKFILTER_MINPOINTS_OPTION, &opt_minpoints,
-    "Discard tracks with fewer than these points",
-    nullptr, ARGTYPE_INT, "0", "50", nullptr
-  },
-  ARG_TERMINATOR
-};
-
-
-typedef struct trkflt_s {
-  route_head* track;
-  QDateTime first_time;
-  QDateTime last_time;
-} trkflt_t;
-
-static trkflt_t* track_list = nullptr;
-static int track_ct = 0;
-static int track_pts = 0;
-static int timeless_pts = 0;
-static int opt_interval = 0;
-static int opt_distance = 0;
-static char need_time;         /* initialized within trackfilter_init */
-
 /*******************************************************************************
 * helpers
 *******************************************************************************/
 
-static int
-trackfilter_opt_count()
+int TrackFilter::trackfilter_opt_count()
 {
   int res = 0;
-  arglist_t* a = trackfilter_args;
+  arglist_t* a = args;
 
   while (a->argstring) {
     if (*a->argval != nullptr) {
@@ -200,8 +56,7 @@ trackfilter_opt_count()
   return res;
 }
 
-static int
-trackfilter_parse_time_opt(const char* arg)
+int TrackFilter::trackfilter_parse_time_opt(const char* arg)
 {
   time_t t0, t1;
   int sign = 1;
@@ -247,8 +102,7 @@ trackfilter_parse_time_opt(const char* arg)
   return t0;
 }
 
-static int
-trackfilter_init_qsort_cb(const void* a, const void* b)
+int TrackFilter::trackfilter_init_qsort_cb(const void* a, const void* b)
 {
   const trkflt_t* ra = (const trkflt_t*) a;
   const trkflt_t* rb = (const trkflt_t*) b;
@@ -264,8 +118,7 @@ trackfilter_init_qsort_cb(const void* a, const void* b)
   return -1;
 }
 
-static int
-trackfilter_merge_qsort_cb(const void* a, const void* b)
+int TrackFilter::trackfilter_merge_qsort_cb(const void* a, const void* b)
 {
   const Waypoint* wa = *(Waypoint**)a;
   const Waypoint* wb = *(Waypoint**)b;
@@ -289,8 +142,7 @@ trackfilter_merge_qsort_cb(const void* a, const void* b)
   return -1;
 }
 
-static fix_type
-trackfilter_parse_fix(int* nsats)
+fix_type TrackFilter::trackfilter_parse_fix(int* nsats)
 {
   if (!opt_fix) {
     return fix_unknown;
@@ -319,8 +171,7 @@ trackfilter_parse_fix(int* nsats)
   return fix_unknown;
 }
 
-static void
-trackfilter_fill_track_list_cb(const route_head* track)        /* callback for track_disp_all */
+void TrackFilter::trackfilter_fill_track_list_cb(const route_head* track)      /* callback for track_disp_all */
 {
   int i;
   Waypoint* wpt, *prev;
@@ -379,8 +230,7 @@ trackfilter_fill_track_list_cb(const route_head* track)     /* callback for track_d
   track_ct++;
 }
 
-static void
-trackfilter_minpoint_list_cb(const route_head* track)
+void TrackFilter::trackfilter_minpoint_list_cb(const route_head* track)
 {
   int minimum_points = atoi(opt_minpoints);
   if (track->rte_waypt_ct < minimum_points) {
@@ -393,8 +243,7 @@ trackfilter_minpoint_list_cb(const route_head* track)
 * track title producers
 *******************************************************************************/
 
-static void
-trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt)
+void TrackFilter::trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt)
 {
   QString datetimestring;
 
@@ -424,8 +273,7 @@ trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt)
   }
 }
 
-static void
-trackfilter_pack_init_rte_name(route_head* track, const time_t default_time)
+void TrackFilter::trackfilter_pack_init_rte_name(route_head* track, const time_t default_time)
 {
   if (strchr(opt_title, '%') != nullptr) {
     struct tm tm;
@@ -450,8 +298,7 @@ trackfilter_pack_init_rte_name(route_head* track, const time_t default_time)
 * option "title"
 *******************************************************************************/
 
-static void
-trackfilter_title()
+void TrackFilter::trackfilter_title()
 {
   int i;
 
@@ -472,8 +319,7 @@ trackfilter_title()
 * option "pack" (default)
 *******************************************************************************/
 
-static void
-trackfilter_pack()
+void TrackFilter::trackfilter_pack()
 {
   int i, j;
   trkflt_t prev;
@@ -511,8 +357,7 @@ trackfilter_pack()
 * option "merge"
 *******************************************************************************/
 
-static void
-trackfilter_merge()
+void TrackFilter::trackfilter_merge()
 {
   int i, j, dropped;
 
@@ -580,8 +425,7 @@ trackfilter_merge()
 * option "split"
 *******************************************************************************/
 
-static void
-trackfilter_split()
+void TrackFilter::trackfilter_split()
 {
   route_head* curr;
   route_head* master = track_list[0].track;
@@ -781,8 +625,7 @@ trackfilter_split()
 * option "move"
 *******************************************************************************/
 
-static void
-trackfilter_move()
+void TrackFilter::trackfilter_move()
 {
   int i;
   queue* elem, *tmp;
@@ -810,8 +653,7 @@ trackfilter_move()
 * options "fix", "course", "speed"
 *******************************************************************************/
 
-static void
-trackfilter_synth()
+void TrackFilter::trackfilter_synth()
 {
   int i;
   queue* elem, *tmp;
@@ -894,8 +736,7 @@ trackfilter_synth()
 * option: "start" / "stop"
 *******************************************************************************/
 
-static time_t
-trackfilter_range_check(const char* timestr)
+time_t TrackFilter::trackfilter_range_check(const char* timestr)
 {
   int i;
   char fmt[20];
@@ -925,8 +766,7 @@ trackfilter_range_check(const char* timestr)
   return mkgmtime(&time);
 }
 
-static int
-trackfilter_range()            /* returns number of track points left after filtering */
+int TrackFilter::trackfilter_range()           /* returns number of track points left after filtering */
 {
   time_t start, stop;
   queue* elem, *tmp;
@@ -984,8 +824,7 @@ trackfilter_range()         /* returns number of track points left after filtering */
 * option "seg2trk"
 *******************************************************************************/
 
-static void
-trackfilter_seg2trk()
+void TrackFilter::trackfilter_seg2trk()
 {
   int i;
 
@@ -1034,8 +873,7 @@ trackfilter_seg2trk()
 * option "trk2seg"
 *******************************************************************************/
 
-static void
-trackfilter_trk2seg()
+void TrackFilter::trackfilter_trk2seg()
 {
   int i, first;
   route_head* master;
@@ -1071,14 +909,7 @@ trackfilter_trk2seg()
 * option: "faketime"
 *******************************************************************************/
 
-typedef struct faketime_s {
-  time_t start;
-  int    step;
-  int   force;
-} faketime_t;
-
-static faketime_t
-trackfilter_faketime_check(const char* timestr)
+TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* timestr)
 {
   int i, j;
   char fmtstart[20];
@@ -1134,8 +965,7 @@ trackfilter_faketime_check(const char* timestr)
   return result;
 }
 
-static int
-trackfilter_faketime()             /* returns number of track points left after filtering */
+int TrackFilter::trackfilter_faketime()             /* returns number of track points left after filtering */
 {
   faketime_t faketime;
 
@@ -1164,8 +994,7 @@ trackfilter_faketime()             /* returns number of track points left after
   return track_pts - dropped;
 }
 
-static int
-trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb)
+int TrackFilter::trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb)
 {
   // We use a simpler (non great circle) test for lat/lon here as this
   // is used for keeping the 'bookends' of non-moving points.
@@ -1188,8 +1017,7 @@ trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb)
     (wpta->temperature == wptb->temperature);
 }
 
-static void
-trackfilter_segment_head(const route_head* rte)
+void TrackFilter::trackfilter_segment_head(const route_head* rte)
 {
   queue* elem, *tmp;
   double avg_dist = 0;
@@ -1237,9 +1065,10 @@ trackfilter_segment_head(const route_head* rte)
 * global cb's
 *******************************************************************************/
 
-static void
-trackfilter_init(const char*)
+void TrackFilter::init()
 {
+  RteHdFunctor<TrackFilter> trackfilter_segment_head_f(this, &TrackFilter::trackfilter_segment_head);
+  RteHdFunctor<TrackFilter> trackfilter_fill_track_list_cb_f(this, &TrackFilter::trackfilter_fill_track_list_cb);
 
   int count = track_count();
 
@@ -1265,7 +1094,7 @@ trackfilter_init(const char*)
 
   // Perform segmenting first.
   if (opt_segment) {
-    track_disp_all(trackfilter_segment_head, nullptr, nullptr);
+    track_disp_all(trackfilter_segment_head_f, nullptr, nullptr);
   }
 
   if (count > 0) {
@@ -1273,15 +1102,14 @@ trackfilter_init(const char*)
 
     /* check all tracks for time and order (except merging) */
 
-    track_disp_all(trackfilter_fill_track_list_cb, nullptr, nullptr);
+    track_disp_all(trackfilter_fill_track_list_cb_f, nullptr, nullptr);
     if (need_time) {
       qsort(track_list, track_ct, sizeof(*track_list), trackfilter_init_qsort_cb);
     }
   }
 }
 
-static void
-trackfilter_deinit()
+void TrackFilter::deinit()
 {
   delete[] track_list;
   track_ct = 0;
@@ -1292,9 +1120,10 @@ trackfilter_deinit()
 * trackfilter_process: called from gpsbabel central engine
 *******************************************************************************/
 
-static void
-trackfilter_process()
+void TrackFilter::process()
 {
+  RteHdFunctor<TrackFilter> trackfilter_minpoint_list_cb_f(this, &TrackFilter::trackfilter_minpoint_list_cb);
+
   int opts, something_done;
 
   if (track_ct == 0) {
@@ -1344,8 +1173,8 @@ trackfilter_process()
       return;
     }
 
-    trackfilter_deinit();       /* reinitialize */
-    trackfilter_init(nullptr);
+    deinit();       /* reinitialize */
+    init();
 
     if (track_ct == 0) {
       return;  /* no more track(s), no more fun */
@@ -1366,8 +1195,8 @@ trackfilter_process()
       return;
     }
 
-    trackfilter_deinit();      /* reinitialize */
-    trackfilter_init(nullptr);
+    deinit();  /* reinitialize */
+    init();
 
     if (track_ct == 0) {
       return;  /* no more track(s), no more fun */
@@ -1381,8 +1210,8 @@ trackfilter_process()
       return;
     }
 
-    trackfilter_deinit();      /* reinitialize */
-    trackfilter_init(nullptr);
+    deinit();  /* reinitialize */
+    init();
   }
 
   if (opt_trk2seg != nullptr) {
@@ -1426,19 +1255,8 @@ trackfilter_process()
 
   // Performed last as previous options may have created "small" tracks.
   if ((opt_minpoints != nullptr) && atoi(opt_minpoints) > 0) {
-    track_disp_all(trackfilter_minpoint_list_cb, nullptr, nullptr);
+    track_disp_all(trackfilter_minpoint_list_cb_f, nullptr, nullptr);
   }
 }
 
-/******************************************************************************************/
-
-filter_vecs_t trackfilter_vecs = {
-  trackfilter_init,
-  trackfilter_process,
-  trackfilter_deinit,
-  nullptr,
-  trackfilter_args
-};
-
-/******************************************************************************************/
 #endif // FILTERS_ENABLED
diff --git a/trackfilter.h b/trackfilter.h
new file mode 100644 (file)
index 0000000..99a6c88
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+
+    Track manipulation filter
+    Copyright (c) 2009 - 2013 Robert Lipe, robertlipe+source@gpsbabel.org
+    Copyright (C) 2005-2006 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+#ifndef TRACKFILTER_H_INCLUDED_
+#define TRACKFILTER_H_INCLUDED_
+
+#include <QtCore/QDateTime>  // for QDateTime
+#include <ctime>             // for time_t
+#include "defs.h"            // for ARG_NOMINMAX, route_head (ptr only), ARG...
+#include "filter.h"          // for Filter
+
+#if FILTERS_ENABLED || MINIMAL_FILTERS
+
+#define TRACKFILTER_PACK_OPTION                "pack"
+#define TRACKFILTER_SPLIT_OPTION       "split"
+#define TRACKFILTER_SDIST_OPTION       "sdistance"
+#define TRACKFILTER_TITLE_OPTION       "title"
+#define TRACKFILTER_MERGE_OPTION       "merge"
+#define TRACKFILTER_NAME_OPTION                "name"
+#define TRACKFILTER_STOP_OPTION                "stop"
+#define TRACKFILTER_START_OPTION       "start"
+#define TRACKFILTER_MOVE_OPTION                "move"
+#define TRACKFILTER_FIX_OPTION          "fix"
+#define TRACKFILTER_COURSE_OPTION       "course"
+#define TRACKFILTER_SPEED_OPTION        "speed"
+#define TRACKFILTER_SEG2TRK_OPTION      "seg2trk"
+#define TRACKFILTER_TRK2SEG_OPTION      "trk2seg"
+#define TRACKFILTER_SEGMENT_OPTION      "segment"
+#define TRACKFILTER_FAKETIME_OPTION     "faketime"
+#define TRACKFILTER_DISCARD_OPTION      "discard"
+#define TRACKFILTER_MINPOINTS_OPTION    "minimum_points"
+
+class TrackFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void init() override;
+  void process() override;
+  void deinit() override;
+
+private:
+  char* opt_merge = nullptr;
+  char* opt_pack = nullptr;
+  char* opt_split = nullptr;
+  char* opt_sdistance = nullptr;
+  char* opt_move = nullptr;
+  char* opt_title = nullptr;
+  char* opt_start = nullptr;
+  char* opt_stop = nullptr;
+  char* opt_fix = nullptr;
+  char* opt_course = nullptr;
+  char* opt_speed = nullptr;
+  char* opt_name = nullptr;
+  char* opt_seg2trk = nullptr;
+  char* opt_trk2seg = nullptr;
+  char* opt_segment = nullptr;
+  char* opt_faketime = nullptr;
+  char* opt_discard = nullptr;
+  char* opt_minpoints = nullptr;
+
+  arglist_t args[19] = {
+    {
+      TRACKFILTER_MOVE_OPTION, &opt_move,
+      "Correct trackpoint timestamps by a delta", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_PACK_OPTION,  &opt_pack,
+      "Pack all tracks into one", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_SPLIT_OPTION, &opt_split,
+      "Split by date or time interval (see README)", nullptr,
+      ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_SDIST_OPTION, &opt_sdistance,
+      "Split by distance", nullptr,
+      ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_MERGE_OPTION, &opt_merge,
+      "Merge multiple tracks for the same way", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_NAME_OPTION, &opt_name,
+      "Use only track(s) where title matches given name", nullptr, ARGTYPE_STRING,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_START_OPTION, &opt_start,
+      "Use only track points after this timestamp", nullptr, ARGTYPE_INT,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_STOP_OPTION, &opt_stop,
+      "Use only track points before this timestamp", nullptr, ARGTYPE_INT,
+      ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_TITLE_OPTION, &opt_title,
+      "Basic title for new track(s)", nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_FIX_OPTION, &opt_fix,
+      "Synthesize GPS fixes (PPS, DGPS, 3D, 2D, NONE)", nullptr,
+      ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_COURSE_OPTION, &opt_course, "Synthesize course",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_SPEED_OPTION, &opt_speed, "Synthesize speed",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_SEG2TRK_OPTION, &opt_seg2trk,
+      "Split track at segment boundaries into multiple tracks",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_TRK2SEG_OPTION, &opt_trk2seg,
+      "Merge tracks inserting segment separators at boundaries",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_SEGMENT_OPTION, &opt_segment,
+      "segment tracks with abnormally long gaps",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_FAKETIME_OPTION, &opt_faketime,
+      "Add specified timestamp to each trackpoint",
+      nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_DISCARD_OPTION,  &opt_discard,
+      "Discard track points without timestamps during merge",
+      nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      TRACKFILTER_MINPOINTS_OPTION, &opt_minpoints,
+      "Discard tracks with fewer than these points",
+      nullptr, ARGTYPE_INT, "0", "50", nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  typedef struct trkflt_s {
+    route_head* track;
+    QDateTime first_time;
+    QDateTime last_time;
+  } trkflt_t;
+
+  trkflt_t* track_list = nullptr;
+  int track_ct = 0;
+  int track_pts = 0;
+  int timeless_pts = 0;
+  int opt_interval = 0;
+  int opt_distance = 0;
+  char need_time;              /* initialized within trackfilter_init */
+
+  int trackfilter_opt_count();
+  int trackfilter_parse_time_opt(const char* arg);
+  static int trackfilter_init_qsort_cb(const void* a, const void* b);
+  static int trackfilter_merge_qsort_cb(const void* a, const void* b);
+  fix_type trackfilter_parse_fix(int* nsats);
+  void trackfilter_fill_track_list_cb(const route_head* track);        /* callback for track_disp_all */
+  void trackfilter_minpoint_list_cb(const route_head* track);
+
+  void trackfilter_split_init_rte_name(route_head* track, const QDateTime& dt);
+  void trackfilter_pack_init_rte_name(route_head* track, const time_t default_time);
+
+  void trackfilter_title();
+
+  void trackfilter_pack();
+
+  void trackfilter_merge();
+
+  void trackfilter_split();
+
+  void trackfilter_move();
+
+  void trackfilter_synth();
+
+  time_t trackfilter_range_check(const char* timestr);
+  int trackfilter_range();             /* returns number of track points left after filtering */
+
+  void trackfilter_seg2trk();
+
+  void trackfilter_trk2seg();
+
+  typedef struct faketime_s {
+    time_t start;
+    int    step;
+    int   force;
+  } faketime_t;
+
+  faketime_t trackfilter_faketime_check(const char* timestr);
+  int trackfilter_faketime();             /* returns number of track points left after filtering */
+  int trackfilter_points_are_same(const Waypoint* wpta, const Waypoint* wptb);
+
+  void trackfilter_segment_head(const route_head* rte);
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // TRACKFILTER_H_INCLUDED_
index 08ce43a296ba77e9188eb27008c1ef1897eac25e..98ddb4e7babd18bf0142f5bc72d0b9d54622571f 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "defs.h"
 #include "filterdefs.h"
+#include "transform.h"
 #include <cstdlib>
 
 #if FILTERS_ENABLED
 
 #define MYNAME "transform"
 
-static char current_target;
-static route_head* current_trk;
-static route_head* current_rte;
-
-static char* opt_routes, *opt_tracks, *opt_waypts, *opt_delete, *rpt_name_digits, *opt_rpt_name;
-static QString current_namepart;
-
-static int name_digits, use_src_name;
-
-static char RPT[] = "RPT";
-
-static
-arglist_t transform_args[] = {
-  {
-    "wpt", &opt_waypts, "Transform track(s) or route(s) into waypoint(s) [R/T]", nullptr,
-    ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "rte", &opt_routes, "Transform waypoint(s) or track(s) into route(s) [W/T]", nullptr,
-    ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "trk", &opt_tracks, "Transform waypoint(s) or route(s) into tracks(s) [W/R]", nullptr,
-    ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "rptdigits", &rpt_name_digits, "Number of digits in generated names", nullptr,
-    ARGTYPE_INT, "2", nullptr, nullptr
-  },
-  {
-    "rptname", &opt_rpt_name, "Use source name for route point names", "N",
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "del", &opt_delete, "Delete source data after transformation", "N",
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  ARG_TERMINATOR
-};
-
-static void
-transform_waypoints()
+void TransformFilter::transform_waypoints()
 {
   route_head* rte;
 
@@ -85,7 +45,7 @@ transform_waypoints()
     break;
   }
 #if NEWQ
-  foreach(Waypoint* wpt, waypt_list) {
+  foreach (Waypoint* wpt, waypt_list) {
 #else
   queue* elem, *tmp;
   QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
@@ -104,8 +64,7 @@ transform_waypoints()
   }
 }
 
-static void
-transform_rte_disp_hdr_cb(const route_head* rte)
+void TransformFilter::transform_rte_disp_hdr_cb(const route_head* rte)
 {
   current_namepart = RPT;
   if (!rte->rte_name.isEmpty() && use_src_name) {
@@ -121,8 +80,7 @@ transform_rte_disp_hdr_cb(const route_head* rte)
   }
 }
 
-static void
-transform_trk_disp_hdr_cb(const route_head* trk)
+void TransformFilter::transform_trk_disp_hdr_cb(const route_head* trk)
 {
   current_namepart = RPT;
   if (!trk->rte_name.isEmpty() && use_src_name) {
@@ -139,8 +97,7 @@ transform_trk_disp_hdr_cb(const route_head* trk)
   }
 }
 
-static void
-transform_any_disp_wpt_cb(const Waypoint* wpt)
+void TransformFilter::transform_any_disp_wpt_cb(const Waypoint* wpt)
 {
   Waypoint* temp = new Waypoint(*wpt);
   if (current_target == 'R') {
@@ -152,34 +109,27 @@ transform_any_disp_wpt_cb(const Waypoint* wpt)
   }
 }
 
-static void
-transform_routes()
+void TransformFilter::transform_routes()
 {
-  route_disp_all(transform_rte_disp_hdr_cb, nullptr, transform_any_disp_wpt_cb);
+  WayptFunctor<TransformFilter> transform_any_disp_wpt_cb_f(this, &TransformFilter::transform_any_disp_wpt_cb);
+  RteHdFunctor<TransformFilter> transform_rte_disp_hdr_cb_f(this, &TransformFilter::transform_rte_disp_hdr_cb);
+
+  route_disp_all(transform_rte_disp_hdr_cb_f, nullptr, transform_any_disp_wpt_cb_f);
 }
 
-static void
-transform_tracks()
+void TransformFilter::transform_tracks()
 {
-  track_disp_all(transform_trk_disp_hdr_cb, nullptr, transform_any_disp_wpt_cb);
+  WayptFunctor<TransformFilter> transform_any_disp_wpt_cb_f(this, &TransformFilter::transform_any_disp_wpt_cb);
+  RteHdFunctor<TransformFilter> transform_trk_disp_hdr_cb_f(this, &TransformFilter::transform_trk_disp_hdr_cb);
+
+  track_disp_all(transform_trk_disp_hdr_cb_f, nullptr, transform_any_disp_wpt_cb_f);
 }
 
 /*******************************************************************************
 * %%%        global callbacks called by gpsbabel main process              %%% *
 *******************************************************************************/
 
-static void
-transform_init(const char*)
-{
-}
-
-static void
-transform_deinit()
-{
-}
-
-static void
-transform_process()
+void TransformFilter::process()
 {
   int delete_after = (opt_delete && (*opt_delete == '1')) ? 1 : 0;
 
@@ -249,16 +199,4 @@ transform_process()
   }
 }
 
-/*******************************************************************************/
-
-filter_vecs_t transform_vecs = {
-  transform_init,
-  transform_process,
-  transform_deinit,
-  nullptr,
-  transform_args
-};
-
-/*******************************************************************************/
-
 #endif // FILTERS_ENABLED
diff --git a/transform.h b/transform.h
new file mode 100644 (file)
index 0000000..9ffe134
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+
+    Transformation filter for GPS data.
+
+    Copyright (C) 2006 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#ifndef TRANSFORM_H_INCLUDED_
+#define TRANSFORM_H_INCLUDED_
+
+#include <QtCore/QString>  // for QString
+#include "defs.h"          // for route_head (ptr only), ARG_NOMINMAX, ARGTY...
+#include "filter.h"        // for Filter
+
+#if FILTERS_ENABLED
+
+class TransformFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void process() override;
+
+private:
+  char current_target;
+  route_head* current_trk;
+  route_head* current_rte;
+
+  char* opt_routes, *opt_tracks, *opt_waypts, *opt_delete, *rpt_name_digits, *opt_rpt_name;
+  QString current_namepart;
+
+  int name_digits, use_src_name;
+
+  const QString RPT = "RPT";
+
+  arglist_t args[7] = {
+    {
+      "wpt", &opt_waypts, "Transform track(s) or route(s) into waypoint(s) [R/T]", nullptr,
+      ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      "rte", &opt_routes, "Transform waypoint(s) or track(s) into route(s) [W/T]", nullptr,
+      ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      "trk", &opt_tracks, "Transform waypoint(s) or route(s) into tracks(s) [W/R]", nullptr,
+      ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+    {
+      "rptdigits", &rpt_name_digits, "Number of digits in generated names", nullptr,
+      ARGTYPE_INT, "2", nullptr, nullptr
+    },
+    {
+      "rptname", &opt_rpt_name, "Use source name for route point names", "N",
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "del", &opt_delete, "Delete source data after transformation", "N",
+      ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  void transform_waypoints();
+  void transform_rte_disp_hdr_cb(const route_head* rte);
+  void transform_trk_disp_hdr_cb(const route_head* trk);
+  void transform_any_disp_wpt_cb(const Waypoint* wpt);
+  void transform_routes();
+  void transform_tracks();
+
+};
+
+#endif // FILTERS_ENABLED
+#endif // TRANSFORM_H_INCLUDED_
index 8d5d9a4c745b0af041de883450fa3641933ea81a..9b449dc935789a3c334fd2554bccab9b71cf0d0c 100644 (file)
 
 #include "defs.h"
 #include "filterdefs.h"
+#include "validate.h"
 #include <cstdio>
 
 #if FILTERS_ENABLED
 #define MYNAME "validate"
 
-static char* opt_debug;
-static bool debug;
-static char* opt_checkempty;
-static bool checkempty;
-static unsigned int point_ct;
-static unsigned int head_ct;
-static unsigned int segment_ct_start;
-static const char* segment_type;
-
-static
-arglist_t validate_args[] = {
-  {
-    "checkempty", &opt_checkempty, "Check for empty input",
-    "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  } ,
-  {
-    "debug", &opt_debug, "Output debug messages instead of possibly issuing a fatal error",
-    "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  } ,
-  ARG_TERMINATOR
-};
-
-
-static void validate_head(const route_head*)
+void ValidateFilter::validate_head(const route_head*)
 {
   head_ct += 1;
   segment_ct_start = point_ct;
 }
 
-static void validate_head_trl(const route_head* header)
+void ValidateFilter::validate_head_trl(const route_head* header)
 {
   int segment_waypt_ct = point_ct - segment_ct_start;
   if (debug) {
@@ -67,14 +45,16 @@ static void validate_head_trl(const route_head* header)
   }
 }
 
-static void validate_point(const Waypoint*)
+void ValidateFilter::validate_point(const Waypoint*)
 {
   point_ct += 1;
 }
 
-static void
-validate_process()
+void ValidateFilter::process()
 {
+  WayptFunctor<ValidateFilter> validate_point_f(this, &ValidateFilter::validate_point);
+  RteHdFunctor<ValidateFilter> validate_head_f(this, &ValidateFilter::validate_head);
+  RteHdFunctor<ValidateFilter> validate_head_trl_f(this, &ValidateFilter::validate_head_trl);
 
   debug = *opt_debug == '1';
   checkempty = *opt_checkempty == '1';
@@ -83,7 +63,7 @@ validate_process()
   if (debug) {
     fprintf(stderr, "\nProcessing waypts\n");
   }
-  waypt_disp_all(validate_point);
+  waypt_disp_all(validate_point_f);
   if (debug) {
     fprintf(stderr, "point ct: %u, waypt_count: %u\n", point_ct, waypt_count());
   }
@@ -97,7 +77,7 @@ validate_process()
   if (debug) {
     fprintf(stderr, "\nProcessing routes\n");
   }
-  route_disp_all(validate_head, validate_head_trl, validate_point);
+  route_disp_all(validate_head_f, validate_head_trl_f, validate_point_f);
   if (debug) {
     fprintf(stderr, "route head ct: %u, route_count: %u\n", head_ct, route_count());
     fprintf(stderr, "total route point ct: %u, route_waypt_count: %u\n", point_ct, route_waypt_count());
@@ -115,7 +95,7 @@ validate_process()
   if (debug) {
     fprintf(stderr, "\nProcessing tracks\n");
   }
-  track_disp_all(validate_head, validate_head_trl, validate_point);
+  track_disp_all(validate_head_f, validate_head_trl_f, validate_point_f);
   if (debug) {
     fprintf(stderr, "track head ct: %u, track_count: %u\n", head_ct, track_count());
     fprintf(stderr, "total track point ct: %u, track_waypt_count: %u\n", point_ct, track_waypt_count());
@@ -134,12 +114,4 @@ validate_process()
   }
 }
 
-filter_vecs_t validate_vecs = {
-  nullptr,
-  validate_process,
-  nullptr,
-  nullptr,
-  validate_args
-};
-
 #endif
diff --git a/validate.h b/validate.h
new file mode 100644 (file)
index 0000000..6932ad6
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+
+    validate internal data structures.
+
+    Copyright (C) 2013 Robert Lipe   robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+*/
+
+#ifndef VALIDATE_H_INCLUDED_
+#define VALIDATE_H_INCLUDED_
+
+#include "defs.h"    // for route_head (ptr only), ARGTYPE_BOOL, ARG_NOMINMAX
+#include "filter.h"  // for Filter
+
+#if FILTERS_ENABLED
+
+class ValidateFilter:public Filter
+{
+public:
+  arglist_t* get_args() override
+  {
+    return args;
+  }
+  void process() override;
+
+private:
+  char* opt_debug;
+  bool debug;
+  char* opt_checkempty;
+  bool checkempty;
+  unsigned int point_ct;
+  unsigned int head_ct;
+  unsigned int segment_ct_start;
+  const char* segment_type;
+  arglist_t args[3] = {
+    {
+      "checkempty", &opt_checkempty, "Check for empty input",
+      "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    {
+      "debug", &opt_debug, "Output debug messages instead of possibly issuing a fatal error",
+      "0", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+    },
+    ARG_TERMINATOR
+  };
+
+  void validate_head(const route_head*);
+  void validate_head_trl(const route_head* header);
+  void validate_point(const Waypoint*);
+
+};
+
+#endif
+#endif // VALIDATE_H_INCLUDED_
index 0983620c65df8180e696dc5ffa36987479689404..7fb2dd4c2ea9e6fc0c0ce2cf9170038240ef72ed 100644 (file)
--- a/waypt.cc
+++ b/waypt.cc
@@ -198,37 +198,6 @@ waypt_status_disp(int total_ct, int myct)
   fflush(stdout);
 }
 
-void
-waypt_disp_all(waypt_cb cb)
-{
-  waypt_disp_session(nullptr, cb);
-}
-
-void
-waypt_disp_session(const session_t* se, waypt_cb cb)
-{
-  int i = 0;
-#if NEWQ
-  foreach(Waypoint* waypointp, waypt_list) {
-#else
-  queue* elem, *tmp;
-  Waypoint* waypointp;
-  QUEUE_FOR_EACH(&waypt_head, elem, tmp) {
-    waypointp = (Waypoint*) elem;
-#endif
-    if ((se == nullptr) || (waypointp->session == se)) {
-      if (global_opts.verbose_status) {
-        i++;
-        waypt_status_disp(waypt_count(), i);
-      }
-      (*cb)(waypointp);
-    }
-  }
-  if (global_opts.verbose_status) {
-    fprintf(stdout, "\r\n");
-  }
-}
-
 void
 waypt_init_bounds(bounds* bounds)
 {